(1)线程1开始执行加1,然后wait一毫秒
(2)这一毫秒里面线程2执行一次,然后wait住
(3)线程1等待一毫秒后自动获取资源的锁,然后唤醒线程2进入就绪状态
(4)线程1还没有释放锁,所以继续循环一次,然后wait一毫秒
(5)这时候线程2可以运行一次并wait
然后重复(3-5)最后直到退出循环。
package com.thread;
public class TwoThread
{
public static void main(String[] args)
{
Counter c = new Counter();
new Thread(new ThreadOne(c),"线程1").start();
new Thread(new ThreadTwo(c),"线程2").start();
}
}
class ThreadOne implements Runnable
{
Counter c;
public ThreadOne(Counter c)
{
this.c = c;
}
/**
*
*/
public void run()
{
synchronized (c)
{
while (c.value < 10)
{
c.value++;
System.out.println(Thread.currentThread().getName() + "将value加1,value = "
+ c.value);
try
{
c.wait(1);//释放对c的同步锁一毫秒,这样线程2就有机会可以执行了(线程2执行后就wait住了)
c.notify();//在一毫秒过后线程1自动获取锁后开始执行,唤醒线程2 ,但不是立即线程2就可以执行,而是等线程一在下一次wait(1):释放同步锁后才开始
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
class ThreadTwo implements Runnable
{
Counter c;
public ThreadTwo(Counter c)
{
this.c = c;
}
/**
*
*/
public void run()
{
synchronized (c)
{
while (c.value < 10)
{
c.value++;
System.out.println(Thread.currentThread().getName() + "将value加1,value = "
+ c.value);
try
{
c.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
class Counter
{
int value;
/**
* @return value
*/
public int getValue()
{
return this.value;
}
}
分享到:
相关推荐
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
java中多线程编程notify、wait的使用
wait和notify讲解
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
3(深入理解Wait、Notify和Wait与sleep区别).rar
开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。
源码—Java多线程5—死锁和wait notify notifyAll
线程编程方面:反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改...若标志指出线程应当恢复,则用一个notify()重新启动线程。
Java 同步方式 wait和notify/notifyall
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
wait,notify等线程知识.pdf
主线程去控制子线程wait与notify
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
一个理解wait()与notify()的例子,让你更好理解.
使用条件变量控制三个线程按顺序输出数字, 第一个线程输出3的倍数余1, 第二个线程输出3的倍数余2, 第三个线程输出3的倍数
java多线程之wait,notify的用法([ 详解+实例 ]).
Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。
java多线程下wait和notify的作用