public class ThreadDemo5 {
public static void main(String[] args){
Pool pool = new Pool();
Productors p1 = new Productors(pool);
Consumers c1 = new Consumers(pool);
Consumers c2 = new Consumers(pool);
p1.start();
c1.start();
c2.start();
}
} class Pool{
private static int MAX = 1;
private java.util.List<Integer> list = new java.util.LinkedList<Integer>(); public void addList(int i){
synchronized(this){ // 如果 这里以 list 为锁,那么后面的wait notify,notifyAll 都要用 list.wait list.notify list.notifyAll
while (list.size()>=MAX){
try{
this.wait(3);//等待 3 毫秒,然后开始抢所得控制权//防止死锁的方式 一
}
catch (Exception e){ }
}
list.add(new Integer(i));
System.out.println("aft add--->>> "+list.size());
// this.notify(); //如果 采用的是notify,且 wait没有指定参数,那么会形成死锁
this.notifyAll(); //将线程等待序列中的所有等待线程都唤醒,notify 是随机唤醒一个。//防止死锁的方式二
}
} public int remove(){
synchronized(this){
while (list.size()<=0){
try{
wait(3);//这里默认就是用的this.wait
}
catch(Exception e){ }
}
int n = list.remove(0); System.out.println("aft remove______--->>> "+list.size());
notifyAll();
return n;
}
} } class Productors extends Thread{
private String name;
private Pool pool;
static int i = 1; public Productors(Pool pool){
this.pool = pool;
}
public void run(){
while(true){
pool.addList(i);
// System.out.println("p.add--->>> "+);
i ++; }
}
}
class Consumers extends Thread{
private Pool pool;
private String name;
public Consumers(Pool pool){
this.pool = pool;
}
public void run(){
while(true){
int result = pool.remove();
// System.out.println("c.remove --->>> "+result);
}
}
}

多线程 死锁 wait(int i) notifyAll()的更多相关文章

  1. Java多线程中wait, notify and notifyAll的使用

    本文为翻译文章,原文地址:http://www.journaldev.com/1037/java-thread-wait-notify-and-notifyall-example 在Java的Obje ...

  2. 使用jstack排查多线程死锁、阻塞

    问题: 针对线上多线程死锁.阻塞,跑着跑着就卡住了 查看线上线程池的状态 jstack用于生成java虚拟机当前时刻的线程快照. 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成 ...

  3. java多线程的wait、notify/notifyAll区别

    1.wait().notify/notifyAll() 方法是Object的本地final方法,无法被重写.   2.wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized ...

  4. Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例

    在几乎所有编程语言中,由于多线程引发的错误都有着难以再现的特点,程序的死锁或其它多线程错误可能只在某些特殊的情形下才出现,或在不同的VM上运行同一个程序时错误表现不同.因此,在编写多线程程序时,事先认 ...

  5. Java 多线程 --死锁及解决方案

    在java 多线程中 过多的同步造成相互不释放资源 从而相互等待,造成死锁线现象,一般发生于同步中持有多个对象锁 如以下代码: public class DeadLock { public stati ...

  6. Java多线程死锁的产生实例

    死锁产生的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用.(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放.(3) 不剥夺条件:进程已获得的资源,在末使用完 ...

  7. web开发中的多线程死锁问题,避免死锁

    1.什么是死锁,产生死锁的原因,和产生死锁的必要条件 所谓死锁(DeadLock),是指多个进程或线程在运行过程中因争夺资源而造成的一种僵局,当进程或线程处于僵局时,若无外力作用,它们将无法再向前推进 ...

  8. gdb调试分析多线程死锁

    转载: http://blog.chinaunix.net/uid-30343738-id-5757210.html #include <stdio.h> #include <pth ...

  9. Java多线程——死锁

    当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他永远被阻塞,当线程A持有锁L并想获得锁M的同时,线程B持有锁M并同时尝试获得锁L时,那么两个线程将永远的等待下去,这中情况就是简单的死 ...

随机推荐

  1. U3D学习005——输入操作

    1.input管理器 edit-project settings-input 2.getaxis——虚拟轴获取 获取水平和垂直的输入和其他输入(input管理器中定义的) 3.对象的transform ...

  2. Chapter1:Qt概念

    信号和槽1.信号与槽机制的连接方式(1):一个信号可以与另一个信号相连,代码如下: connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1)); ...

  3. OpenGL模版小案例分析

    下面的案例通过模版实现三角形截取的功能,代码如下: void draw(){ GLuint programObject; GLfloat vVerticessmall[] = { 0.0f, 0.25 ...

  4. sql server与C#中的字符串相等等效写法

    sql server两个字段相等判断默认不区分大小写,并且字符串进行Unicode规范化处理. 等效c#中的相等为s=="字符".ToLower().Normalize(Syste ...

  5. nodejs运行的两种方式<小记>

    在mac上: 1.方式一:使用IDE运行 配置需要运行的js文件: 配置并运行 ①配置运行的js文件和运行的文件不一致时会导致报错.如图备注 ②当运行另一个文件提示端口8080被占用 ,需要改为其他端 ...

  6. 第一次调用从server获取Cookie

    System.setProperty("javax.net.ssl.trustStore", certPath); public String getCookieString(St ...

  7. 权限认证之OpenID-OP/RP

    OpenID规范文档中的介绍: OpenID 认证提供了一种方式,可以让用户证明自己对某个 Identifier 拥有控制权. 它不需要 Relying Party 去访问用户的凭据比如密码或者其他的 ...

  8. css hack 用法注意

    CSS hack 分类:CSS属性前缀法.选择器前缀法以及IE条件注释法 1.属性前缀法(即类内部Hack):例如 IE6能识别下划线""和星号" * ",IE ...

  9. xmlhttp.readyState的值及解释:

    xmlhttp.readyState的值及解释: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...

  10. py库: xlwt 、xlrd (写读EXCEL文件)

    写EXCEL文件 # -*- coding: utf-8 -*- import xlwt book = xlwt.Workbook(encoding = "utf-8", styl ...