传统多线程之前如何共享数据
生活随笔
收集整理的这篇文章主要介绍了
传统多线程之前如何共享数据
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
几种方式
- 线程执行代码相同,使用同一Runnable对象,Runnable对象中有共享数据
- 线程执行代码不同,将共享数据封装在另一对象中(操作数据的方法也在该对象完成),将这个对象逐一传递给各个Runnable对象。[本质:共享数据的对象作为参数传入Runnable对象]
- 线程执行代码不同,将Runnable对象作为某一个类的内部类,共享数据作为这个外部类的成员变量(操作数据的方法放在外部类)。[本质:不同内部类共享外部类数据]
- 结合上两种方式,将共享数据封装在另一对象中(操作数据的方法也在该对象完成),该对象作为这个外部类的成员变量,将Runnable对象作为内部类
最后一种方式的示例:
设计5个线程,其中三个线程每次对j增加1,另外两个线程对j每次减少1
package com.iot.thread;public class MutiThreadShareData {private static MutiShareData mutiShareData = new MutiShareData();public static void main(String[] args) {for(int i=0;i<3;i++){new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread()+":{j from "+ mutiShareData.getJ()+" + to: "+mutiShareData.increment()+"}");}}).start();}for(int i=0;i<2;i++){new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread()+":{j from "+ mutiShareData.getJ()+" - to: "+mutiShareData.decrement()+"}");}}).start();}}}/** * 将共享数据封装在另一对象中(操作数据的方法也在该对象完成) */ class MutiShareData{private int j = 0;public synchronized int increment(){return ++j;}public synchronized int decrement(){return --j;}public synchronized int getJ() {return j;}public synchronized void setJ(int j) {this.j = j;} }总结
以上是生活随笔为你收集整理的传统多线程之前如何共享数据的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 清理Mac上的软件容易吗?
- 下一篇: 话说:学好C语言,走遍天下都不怕