程序功能: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相关推荐

  1. java 线程的join_多线程中join()

    这个鬼东西百度了好久没弄明白,大佬们代码一粘贴好了完事,借助官方api终于是理解了,当然如果有问题欢迎大家用键盘来羞辱我. 首先  join有什么用?   他是用来确定线程何时结束的 , Thread ...

  2. 基于Java线程池读取数据库中数据(学习+运用)

    基于Java线程池读取数据库中数据(学习+运用) 以下是学习内容 Main.java import java.util.concurrent.ArrayBlockingQueue; import ja ...

  3. java闭合数据_java多线程中线程封闭详解

    线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...

  4. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  5. java 锁竞争_Java多线程中的竞争条件、锁以及同步的概念

    竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生"竞争条件"的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作 ...

  6. java线程安全的list_Java中的集合和线程安全

    通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所 ...

  7. java 线程类 通信_Java 中利用管道实现线程间的通讯

    在Java 语言中,提供了各种各样的输入输出流(stream),使我们能够很方便的对数据进行操作,其中,管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据.一个线程发送数 ...

  8. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  9. java线程入门_java多线程快速入门(一)

    1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...

最新文章

  1. torch量化的流程
  2. oracle里面子判断,在过程中添加子进程,在子过程中判断
  3. Vertebrae 发布了新的SDK!
  4. linux下gzip用法,Linux下tar和gzip命令的方法
  5. 在wine里安装了IE6
  6. node mysql查询回调_nodejs 数据库查询回调问题
  7. 光敏电阻控制led亮度程序_Arduino动手做(2)光敏电阻模块
  8. JDK集合框架结构分析(二)
  9. 【渝粤教育】国家开放大学2018年秋季 0716-21T工程建设法规 参考试题
  10. 【python】isinstance可以接收多个类型,hasattr,getattr,setattr
  11. Linux的主动实行措施cron和crontab(1)
  12. 《Windows游戏编程大师技巧》(第二版)
  13. MySQL-查询本周过生日的人-终极答案
  14. 逆水寒服务器什么时候能维护好,逆水寒11月22日更新维护公告 逆水寒更新到什么时候...
  15. 关于Ubuntu22.04无法定位软件包
  16. android拷机获取内存使用的脚本
  17. 解决“fatal: 'origin' does not appear to be a git repository...”
  18. 阿里云1+X-云计算开发与运维-中级(多选题)
  19. Navicat的安装及免费使用方式
  20. Exercise:学习使用Numpy

热门文章

  1. Transaction中的SQL死锁
  2. Android Studio 快捷键使用说明
  3. Ruby Cucumber环境
  4. 【JavaScript】你知道吗?Web的26项基本概念和技术
  5. hdu 4417 Super Mario 划分树+二分
  6. 人脸识别安全吗?调查称六成受访者认为技术有被滥用趋势
  7. RS232详解(续)
  8. 图像形态学操作—腐蚀膨胀深入
  9. 关于格雷码的规律、转换
  10. html实现照片添加功能,HTML5 Canvas调用手机拍照功能实现图片上传功能(图文详解上篇)...