一、如果是每个线程都执行相同的代码,则可以使用同一个Runnable来实现共享
public class MultiThreadShareData { public static void main(String[] args) { new Thread(new ShareData()).start(); new Thread(new ShareData()).start(); } static class ShareData implements Runnable{ private int j = 100; @Override public synchronized void run() { j--; } } }
上面代码中两个线程共享数据实现对j变量的递减操作,至于上面代码中为什么要使用一个静态内部类,该类static的作用是不依赖外部类的实例创建对象。
二、如果每个线程执行的代码不同,则需要使用不同的Runnable对象来实现共享
public class MultiThreadShareData { public static void main(String[] args) { final ShareData data1 = new ShareData(); //启动第一个线程 new Thread(new Runnable() { @Override public void run() { data1.increment(); //加 } }).start(); //启动第二个线程 new Thread(new Runnable() { @Override public void run() { data1.decrement(); //减 } }).start(); } static class ShareData{ private int j = 0; public synchronized void increment(){ j++; } public synchronized void decrement(){ j--; } } }
将上面代码进修改(将数据作为外部类的成员变量,让Runnable接口操作该成员变量)如下:
public class MultiThreadShareData { public static void main(String[] args) { ShareData data1 = new ShareData(); new Thread(new MyRunnable1(data1)).start(); new Thread(new MyRunnable2(data1)).start(); } static class MyRunnable1 implements Runnable{ private ShareData data1; public MyRunnable1(ShareData data1){ this.data1 = data1; } @Override public void run() { data1.increment(); } } static class MyRunnable2 implements Runnable{ private ShareData data1; public MyRunnable2(ShareData data2){ this.data1 = data1; } @Override public void run() { data1.decrement(); } } static class ShareData{ private int j = 0; public synchronized void increment(){ j++; } public synchronized void decrement(){ j--; } } }
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, static
, new
, runnable
, public
, void
Android共享数据
多线程共享变量、java多线程共享变量、java多线程数据共享、多线程数据共享、python多线程共享变量,以便于您获取更多的相关知识。
时间: 2024-12-29 05:45:27