本文主要是介绍多个线程访问共享对象和数据的方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如果每个线程执行的代码相同,可以使用同一个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() {@Overridepublic void run() {while(true){c.add();}}}).start();new Thread(new Runnable() {@Overridepublic 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;@Overridepublic void run() {while(count>0){count--;System.out.println(Thread.currentThread().getName()+" count :"+count);}}}
这篇关于多个线程访问共享对象和数据的方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!