程序员社区

(Java并发面试题)如何在两个线程间共享数据?

同一个Runnable,使用全局变量。

第一种:将共享数据封装到一个对象中,把这个共享数据所在的对象传递给不同的Runnable

第二种:将这些Runnable对象作为某一个类的内部类,共享的数据作为外部类的成员变量,对共享数据的操作分配给外部类的方法来完成,以此实现对操作共享数据的互斥和通信,作为内部类的Runnable来操作外部类的方法,实现对数据的操作

class ShareData {
 private int x = 0;

 public synchronized void addx(){
   x++;
   System.out.println("x++ : "+x);
 }
 public synchronized void subx(){
   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(); 
 }
}

Java面试题

赞(0) 打赏
未经允许不得转载:IDEA激活码 » (Java并发面试题)如何在两个线程间共享数据?

一个分享Java & Python知识的社区