java线程中notify_Java多线程中关于notify和wait
程序功能:4个线程,2个线程对某个数值进行加1;2个线程进行减1,要求该数在0和1之间切换。程序如下,大家看看问题出在哪里:
DecThread类,对sample的i进行减1的线程:
public class DecThread extends Thread{
private Sample sample;
public DecThread(Sample sample, String name){
super(name);
this.sample = sample;
}
@Override
public void run() {
for(int i=0; i<20; i++){
sample.dec();
}
}
}
IncThread 类,对sample的i进行加1的线程:
public class IncThread extends Thread{
private Sample sample;
public IncThread(Sample sample, String name){
super(name);
this.sample = sample;
}
@Override
public void run() {
for(int i=0; i<20; i++){
sample.inc();
}
}
}
Sample类:
public class Sample {
int i = 0;
public synchronized void inc() {
try {
while (i == 1) {
wait();
}
i++;
System.out.println(Thread.currentThread().getName() + "-" + i);
notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void dec() {
try {
while (i == 0) {
wait();
}
i--;
System.out.println(Thread.currentThread().getName() + "-" + i);
notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试类TestIncDec :
public class TestIncDec {
public static void main(String[] args) {
Sample sample = new Sample();
IncThread inc1 = new IncThread(sample,"inc1");
IncThread inc2 = new IncThread(sample,"inc2");
DecThread dec1 = new DecThread(sample,"dec1");
DecThread dec2 = new DecThread(sample,"dec2");
inc1.start();
inc2.start();
dec1.start();
dec2.start();
}
}
java线程中notify_Java多线程中关于notify和wait相关推荐
- java 线程的join_多线程中join()
这个鬼东西百度了好久没弄明白,大佬们代码一粘贴好了完事,借助官方api终于是理解了,当然如果有问题欢迎大家用键盘来羞辱我. 首先 join有什么用? 他是用来确定线程何时结束的 , Thread ...
- 基于Java线程池读取数据库中数据(学习+运用)
基于Java线程池读取数据库中数据(学习+运用) 以下是学习内容 Main.java import java.util.concurrent.ArrayBlockingQueue; import ja ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- java 锁竞争_Java多线程中的竞争条件、锁以及同步的概念
竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生"竞争条件"的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作 ...
- java线程安全的list_Java中的集合和线程安全
通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所 ...
- java 线程类 通信_Java 中利用管道实现线程间的通讯
在Java 语言中,提供了各种各样的输入输出流(stream),使我们能够很方便的对数据进行操作,其中,管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据.一个线程发送数 ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java线程入门_java多线程快速入门(一)
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...
最新文章
- torch量化的流程
- oracle里面子判断,在过程中添加子进程,在子过程中判断
- Vertebrae 发布了新的SDK!
- linux下gzip用法,Linux下tar和gzip命令的方法
- 在wine里安装了IE6
- node mysql查询回调_nodejs 数据库查询回调问题
- 光敏电阻控制led亮度程序_Arduino动手做(2)光敏电阻模块
- JDK集合框架结构分析(二)
- 【渝粤教育】国家开放大学2018年秋季 0716-21T工程建设法规 参考试题
- 【python】isinstance可以接收多个类型,hasattr,getattr,setattr
- Linux的主动实行措施cron和crontab(1)
- 《Windows游戏编程大师技巧》(第二版)
- MySQL-查询本周过生日的人-终极答案
- 逆水寒服务器什么时候能维护好,逆水寒11月22日更新维护公告 逆水寒更新到什么时候...
- 关于Ubuntu22.04无法定位软件包
- android拷机获取内存使用的脚本
- 解决“fatal: 'origin' does not appear to be a git repository...”
- 阿里云1+X-云计算开发与运维-中级(多选题)
- Navicat的安装及免费使用方式
- Exercise:学习使用Numpy