多个线程访问共享对象和数据的方式

来源:互联网 发布:unity3d工程师笔试题 编辑:程序博客网 时间:2024/05/22 06:53

如果每个线程执行的代码相同,可以使用同一个runnable对象,这个Runnable对象中有那个共享数据
比如卖票程序
每个线程访问的数据不同,将这个共享数据封在对象中,把这个对象

public class TheardTestController {    public static void main(String[] args) {        //卖票        Sale sale=new Sale();        new Thread(sale).start();        new Thread(sale).start();        //每个线程访问的数据不同  共享变量j  启动四个线程 两个操作j++ 两个操作j--        //思路是定义两个内部类实现runnable接口  共享外部类的成员变量        final Calculate c=new Calculate();//c对象为什么要用final修饰? 匿名内部类调用外部类的成员,外部类成员是以参数形式传入的        //在匿名类中需要传递进来final关键字,java希望的是保证内部实现和外在表现的一致性          //如果不将c设为final,就不会使得start()函数的局部变量和局部类内建立的拷贝保持一致         for(int i=0;i<2;i++){            new Thread(new Runnable() {                @Override                public void run() {                    while(true){                    c.add();                    }                }            }).start();            new Thread(new Runnable() {                @Override                public void run() {                    while(true){                    c.reduce();                    }                }            }).start();        }    }}class Calculate{    private int j=0;    public void add(){        j++;        System.out.println(Thread.currentThread().getName()+"add   j="+j);    }    public void reduce(){        j--;        System.out.println(Thread.currentThread().getName()+"reduce   j="+j);    }}    class Sale implements Runnable{        private int count=100;        @Override        public void run() {            while(count>0){                count--;                System.out.println(Thread.currentThread().getName()+" count :"+count);            }        }    }
0 0
原创粉丝点击