同一个Runnable,使用全局变量。
第一种:将共享数据封装到一个对象中,把这个共享数据所在的对象传递给不同的Runnable
第二种:将这些Runnable对象作为某一个类的内部类,共享的数据作为外部类的成员变量,对共享数据 的操作分配给外部类的方法来完成,以此实现对操作共享数据的互斥和通信,作为内部类的Runnable来 操作外部类的方法,实现对数据的操作
class ShareData{ private int x =0;public synchronized voidaddx(){ x++;System.out.println("x++ : "+x);}public synchronized voidsubx(){ x--;System.out.println("x-- : "+x);}}public class ThreadsVisitData {public static ShareData share = new ShareData();public static void main(String[] args) {//final ShareData share = new ShareData();new Thread(new Runnable() {public void run() {for(int i =0;i<100;i++){ share.addx();}}}).start();new Thread(new Runnable(){ public void run() {for(int i =0;i<100;i++){ share.subx();}}}).start()
本文介绍了一种通过Runnable接口实现多线程对共享数据进行安全访问的方法。具体包括两种方案:一是将共享数据封装到单独的对象中,二是通过内部类的形式共享外部类的数据成员,并利用synchronized关键字确保对共享数据操作的原子性和互斥性。

被折叠的 条评论
为什么被折叠?



