java多线程


第一步:扩展Thread类或者实现Runnable接口;
第二步:用希望的执行代码来实现run()方法;
第三步: 通过new关键字实例化该类的一个新对象(即一个线程);
第四步: 通过调用start()方法启动线程。

多线程修改静态数据和堆数据的实验:

public class  MultiThread extends Thread{//栈内数据是线程私有的
    static int i = 0;//静态数据存放在方法区
    int[] data;//引用指向的内存在堆中,通过堆共享数据 改成int[] data = new int[1]就不能被多线程共享了。
    MultiThread(int[] data){
        this.data = data;
        data[0]++;
        i++;
    }
    public void run(){
        data[0]=data[0]+1;
        System.out.println("thread("+i+")    "+"i,data[0]:    "+i+" "+data[0]+" ");
        return;
    }
    public static void main(String[] args){
        MultiThread[] multithread = new MultiThread[10];
        int[] data = new int[1];
        for(MultiThread thread:multithread){
            thread = new MultiThread(data);
            thread.start();
        }
        System.out.println();
        System.out.println("All thread is started");
        return;
    }
}
View Code

java多线程_第1张图片

public class  MultiThread implements Runnable{//栈内数据是线程私有的
    static int i = 0;//静态数据存放在方法区
    int[] data;//引用指向的内存在堆中,通过堆共享数据 这里可以改成改成int[] data = new int[1];data[0] = 100;
    MultiThread(int[] data){
        this.data = data;
    }
    public void run(){
        i++;
        //sychronnized(){
            data[0]--;
        //}
        System.out.println("thread("+i+")    "+"i,data[0]:    "+i+" "+data[0]+" ");
        return;
    }
    public static void main(String[] args){
        int[] data = new int[1];
        MultiThread multithread = new MultiThread(data);//不同点
        data[0] = 100;
        int n =10;
        for(int i=0;i<n;i++){
            new Thread(multithread).start();//不同点,也可用new Thread(new MultiThread(data))
        }
        System.out.println();
        System.out.println("All thread is started");
        return;
    }
}
View Code

 

实现Runnable接口(与上面代码只有在创建类时有不同、可以只创建一个类,一个类创建多个线程):

 

你可能感兴趣的:(java多线程)