⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bufferlock.java

📁 《Java2程序设计实用教程(第2版)》课件
💻 JAVA
字号:
//【例7.7】  采用信号量和同步方法使发送线程与接收线程同步运行。

public class BufferLock                    //加互斥锁的缓冲区
{
    private int value;                     //共享变量
    private boolean isEmpty = true;        //value是否为空的信号量
    
    public synchronized void put(int i)    //同步方法
    {
        while (!isEmpty)                   //当value不空时,等待
        {
            try
            {
                 this.wait();              //使调用该方法的当前线程等待,即阻塞自己
            }
            catch(InterruptedException e) {}
        }
        
        value = i;                         //当value空时,value获得值
        isEmpty = false;                   //设置value为不空状态
        notify();                          //唤醒其他等待线程
    }
    
    public synchronized int get()          //同步方法
    {
        while (isEmpty)                    //当value空时,等待
        { 
            try
            {
                 this.wait();
            }
            catch(InterruptedException e) {}
        }

        isEmpty = true;                    //设置value为空状态,并返回值
        notify();
        return value;                      
    }
}

class Sender extends Thread                //发送线程类
{
    private BufferLock buffer;
    
    public Sender(BufferLock buffer)
    {
        this.buffer = buffer;
    }
    
    public void run( )
    {
        for (int i=1;i<6;i++)
        {
            buffer.put( i );
            System.out.println("Sender  put : " + i );
        }
    }
}

class Receiver extends Thread             //接收线程类
{
    private BufferLock buffer;
    
    public Receiver(BufferLock buffer)
    {
        this.buffer = buffer ;
    }
    
    public void run()
    {
        for (int i=1; i<6;i++)
            System.out.println("\t\t\tReceiver get : " + buffer.get()) ;
    }

    public static void main (String args[])
    {
        BufferLock buffer = new BufferLock();
        (new Sender(buffer)).start();
        (new Receiver(buffer)).start();
    }

}


/*
程序运行结果如下:
Sender  put : 1
             Receiver get : 1
Sender  put : 2
             Receiver get : 2
Sender  put : 3
             Receiver get : 3
Sender  put : 4
             Receiver get : 4
Sender  put : 5
             Receiver get : 5
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -