欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java Semaphore信号量控制同步,javasemaphore,信号量通过一个计数器控制

来源: javaer 分享于  点击 8324 次 点评:236

java Semaphore信号量控制同步,javasemaphore,信号量通过一个计数器控制


信号量通过一个计数器控制对共享资源的访问

package sync;import java.util.concurrent.Semaphore;/** * 公共数据 *  * @author lei 2011-8-25 */class Shared {    public static int count;}/** * 递减线程 *  * @author lei 2011-8-25 */class DecThread implements Runnable {    private Semaphore sem;    private String name;    DecThread(Semaphore sem, String name) {        this.sem = sem;        this.name = name;        new Thread(this).start();    }    @Override    public void run() {        try {            System.out.println(name + ":等待通行证..");            sem.acquire();            System.out.println(name + ":得到通行证");            for (int i = 0; i < 5; i++) {                Shared.count--;                System.out.println(name + ":" + Shared.count);                Thread.sleep(10);            }            sem.release();            System.out.println(name + "释放通行证");        } catch (InterruptedException e) {            e.printStackTrace();        }    }}/** * 递加线程 *  * @author lei 2011-8-25 */class IncThread implements Runnable {    private Semaphore sem;    private String name;    IncThread(Semaphore sem, String name) {        this.sem = sem;        this.name = name;        new Thread(this).start();    }    @Override    public void run() {        try {            System.out.println(name + ":等待通行证..");            sem.acquire();            System.out.println(name + ":得到通行证");            for (int i = 0; i < 5; i++) {                Shared.count++;                System.out.println(name + ":" + Shared.count);                Thread.sleep(10);            }            sem.release();            System.out.println(name + "释放通行证");        } catch (InterruptedException e) {            e.printStackTrace();        }    }}/** * 信号量通过一个计数器控制对共享资源的访问 *  * @author lei 2011-8-25 */public class SemaphoreTest {    public static void main(String[] args) {        // 信号量通过一个计数器控制对共享资源的访问        Semaphore sem = new Semaphore(1);        // 新启线程,传入信号量        new IncThread(sem, "Inc");        new DecThread(sem, "Dec");    }}

输出:

Inc:等待通行证..Inc:得到通行证Dec:等待通行证..Inc:1Inc:2Inc:3Inc:4Inc:5Inc释放通行证Dec:得到通行证Dec:4Dec:3Dec:2Dec:1Dec:0Dec释放通行证
相关栏目:

用户点评