java多线程信息共享 多线程管理
java多线程信息共享 & 多线程管理
- 信息共享
- 多线程管理
信息共享
继承Thread的类通过static共享变量;
实现Runnable接口的类私有变量即可。
对于信息共享数据不一致的问题:
1.副本变量用volatile关键字修饰;保证不同线程共享变量操作的可见性。
2. 关键步骤加锁限制:
互斥:某一线程运行时候,其他线程不可运行,采用:synchronized修饰。
同步:各个线程按照一定的先后顺序执行。
多线程管理
其中关于线程间的阻塞/唤醒方法:
- sleep()
- wait(), notify(), notifyAll().
- join():等待另一个线程结束
- interrupt(), 向另一个程序发送中断信号,该程序收到中断信号后,会触发InterruptedException,可进行下一步。
例子1:
定义两个线程类,均继承Thread类。
TestThread11:采用interrupt()方法进行中断程序;
TestThread22:采用标志flag来停止该线程。且flag采用volatile修饰,是安全的多个线程共享变量。
package multiThread;
public class InterruptedThread {public static void main(String[] args) throws InterruptedException {TestThread11 t1 = new TestThread11();TestThread22 t2 = new TestThread22();t1.start();t2.start();Thread.sleep(2000);t1.interrupt();t2.flag = false;System.out.println("main Thread is exiting!");}}class TestThread11 extends Thread{public void run() {while(!interrupted()) {System.out.println("Thread1 is running!");try {Thread.sleep(1000);}catch(InterruptedException e) {e.printStackTrace();break;}}System.out.println("Thread1 is exiting!");}
}class TestThread22 extends Thread{public volatile boolean flag = true;public void run() {while(flag) {System.out.println("Thread2 is running!");try {Thread.sleep(1000);}catch(InterruptedException e) {e.printStackTrace();}}System.out.println("Thread2 is exiting!");}
}
例2:
为了实现线程之间的同步,采用synchronized修饰关键字段,二者分别要依次获取变量r1,r2才可以执行。就如同哲学家吃面的问题。
package multiThread;import java.util.concurrent.TimeUnit;public class TestDemo5 {public static Integer r1 = 1;public static Integer r2 = 2;public static void main(String[] args) {Demo1 t1 = new Demo1();Demo2 t2 = new Demo2();t1.start();t2.start();}
}class Demo1 extends Thread{public void run() {synchronized(TestDemo5.r1){try {TimeUnit.SECONDS.sleep(2);}catch(InterruptedException e){e.printStackTrace();}synchronized(TestDemo5.r2) {System.out.println("Thread1 is exiting!");}}}
}class Demo2 extends Thread{public void run() {synchronized(TestDemo5.r1) {try {TimeUnit.SECONDS.sleep(2);}catch(InterruptedException e) {e.printStackTrace();}synchronized(TestDemo5.r2) {System.out.println("Thread2 is exiting!");}}}
}
java多线程信息共享 多线程管理相关推荐
- 基于JAVA考研信息共享平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署
基于JAVA考研信息共享平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA考研信息共享平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署 ...
- java多线程共享信息_java多线程信息共享
上篇文章知识介绍了多线程的创建和启动问题,各个子线程和子线程或者说子线程和main线程没有信息的交流,这篇文章主要探讨线程之间信息共享以及交换问题.这篇文章主要以一个卖票例子来展开. 继承Thread ...
- 基于JAVA学生管理部门信息共享交流系统计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA学生管理部门信息共享交流系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA学生管理部门信息共享交流系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目 ...
- 一篇博客带你轻松应对java面试中的多线程与高并发
1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...
- 并发基础篇(一): Java 并发性和多线程
说在前面 介绍文章之前,先给出一个多线程的思维导图, 后续的文章就根据思维导图来一步一步的分析java多线程的知识. 一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多 ...
- Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?
苍穹之边,浩瀚之挚,眰恦之美: 悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 我国宋代禅宗大师青原行思在<三重境界>中有这样一句话:" 参禅之初 ...
- 明翰Java教学系列之多线程篇V0.2(持续更新)
文章目录 传送门 前言 背景知识 并行与并发 线程与进程 内存模型 1. 计算机内存模型 `2. Java内存模型` 2.1 内存交互 2.1.1 交互操作 2.1.2 交互规则 `2.2 并发编程特 ...
- Java高级特性增强-多线程
请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...
- Java基础篇:多线程
文章目录 1.概念:程序.进程.线程 2.线程的创建和使用 3.线程的生命周期 4.线程的同步 5.线程的通信 6.JDK5.0新增线程创建方法 1.概念:程序.进程.线程 程序(program)是为 ...
最新文章
- android 访问http地址吗,浅谈android访问http原理
- python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)...
- GO语言使用的几个注意点
- tree树的展示,check树的展示,json数据转zree树格式数据
- 文本框不可编辑,只可使用帮助的解…
- 天池 在线编程 求和查找
- 【LeetCode笔记】剑指Offer 59. I 滑动窗口的最大值(Java、单调队列)
- P4行为模型BMV2依赖关系安装:thrift nanomsg nnpy安装
- Mybatis 二级缓存简单示例
- python时间序列模型有哪些_时间序列模型(ARIMA)
- cocostudio中的一些控件的使用
- 发那科机器人tp文件转成文本_fanuc_机器人中文简易教材.pdf
- ENVI监督分类中SVM(支持向量机)工具
- STM8 低功耗设计
- 理解ZBrush中的笔触
- 0基础学RS(三)路由器基本配置
- 入手佳能24-70mm f/2.8L
- python爬取电影天堂
- 多个USB转串口设备区分方法
- win10备份为wim_Win10 也能玩转一键还原