首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

notify跟wait举例,俩线程交替累加统一个变量到10

2012-12-27 
notify和wait举例,俩线程交替累加统一个变量到10(1)线程1开始执行加1,然后wait一毫秒(2)这一毫秒里面线程2

notify和wait举例,俩线程交替累加统一个变量到10

(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;    }}

?

热点排行
Bad Request.