几种方式

  • 线程执行代码相同,使用同一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;}
}

传统多线程之前如何共享数据相关推荐

  1. 多线程訪问共享数据(1)

    多线程訪问共享数据解决方式: 一.什么是多线程 线程是程序中一个单一的顺序控制流程.在单个程序中同一时候运行多个线程完毕不同的工作,称为多线程. 全部的线程尽管在微观上是串行运行的,可是在宏观上你全然 ...

  2. JAVA 并发编程-多个线程之间共享数据(六)

    多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做. 2,如果每个线程执行的代码不同,这时 ...

  3. python—多线程之线程之间共享数据(Queue)

    一.Queue理解 从一个线程向另一个线程发送数据最安全的方式可能就是使用queue库中的队列了.创建一个被多个线程共享的Queue对象,这些线程通过使用put()和get()操作来向队列中添加或者删 ...

  4. python—多线程之共享数据

    多线程共享全局变量 主线程中的全局变量,作为所有子线程的共享数据 在一个进程中,至少有一个线程,这个线程就是当前进程的主线程, 执行结果: 多线程还可以共享可变的是数据类型

  5. java 多线程 共享数据_JAVA多线程提高四:多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  6. JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池...

    /*** 多线程共享数据* 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行.* 多线程共享数据的安全问题,使用同步解决.* 线程同步两种方法: ...

  7. C++多线程快速入门(二)共享数据同步以及数据竞争

    目录 std::unique_lock类模板 仅调用一次 线程局部存储 原子变量 往期内容回顾 std::unique_lock类模板 互斥锁保证了线程间的同步,却将并行操作变成了串行操作,对性能有较 ...

  8. 多线程-非共享数据(python 版)

    多线程-非共享数据 对于全局变量,在多线程中要格外小心,否则容易造成数据错乱的情况发生 1. 非全局变量是否要加锁呢? #coding=utf-8import threadingimport time ...

  9. java 多线程共享变量两类问题_Java并发基础09. 多个线程间共享数据问题

    先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...

最新文章

  1. Geany 权限问题:Error opening file ... : permission denied.,原因及解决办法。
  2. NOI2014 动物园
  3. oracle删错表了怎么办,Oracle中表被删除或数据被错误修改后的恢复方法
  4. el-table表格fixed=“right“后表格错乱;Safari浏览器el-table表格错乱;Safari浏览器样式需改无效;
  5. java代码块是什么_Java代码块
  6. CRC 冗余校验计算
  7. 依赖注入有点_12.24 (Core管道amp;中间件amp;依赖注入+琐碎笔记)
  8. TunesKit Video Cutter for mac(视频分割编辑器)
  9. [libtorrent] windows搭建 libtorrent 开发环境
  10. P1938 [USACO09NOV]Job Hunt S(spfa,队列+邻接表优化)
  11. trans系列是sci几区_sci怎么看几区
  12. ImageLoader 图片异步加载类库的使用
  13. win10安装opencv,pycharm中import cv2失败
  14. 音乐伴奏如何提取?不容错过的几款软件
  15. youtube后端是python吗_Web后端开发,用Python还是Go呢?
  16. 不用PS,也能实现抠图的工具
  17. Python爬虫——selenium爬取网易云评论并做词云
  18. 计算机配置单性价比高,钻研组装电脑高配置清单
  19. GPU服务器使用教程
  20. python股票分析之放量跌倒底买入

热门文章

  1. ListView和RecyclerView的Adapter封装
  2. python全局解释锁_Python GIL 全局解释性锁介绍
  3. 苹果学生购机优惠_送AirPods!苹果暑季学生优惠收MacBook Air+AirPods
  4. Springboot工程下使用mybatis反向工程
  5. linux查看占用的命令,linux内存占用查看命令
  6. 手动备份MySQL数据库_8种手动和自动备份MySQL数据库的方法
  7. 自动化监控--zabbix中的用户和用户组详解
  8. 基于nginx实现反向代理
  9. nginx+tomcat实现Windows系统下的负载均衡搭建教程
  10. kafka shell