Java多线程系列(二十二)Semaphore使用
程序员文章站
2024-03-25 23:46:52
...
信号量用来控制能够同时访问的此时:
Semaphore semphore = new Semaphore(3);
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
semphore.acquire();
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
Random random = new Random();
Thread.sleep(random.nextInt(1000)+1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("thread1 一次循环开始");
try {
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread1 一次循环结束");
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
semphore.acquire();
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
Random random = new Random();
Thread.sleep(random.nextInt(1000)+1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("thread2 一次循环开始");
try {
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread2 一次循环结束");
}
}
});
thread1.start();
thread2.start();
打印结果如下:
thread1 一次循环开始
thread1 一次循环结束
thread2 一次循环开始
thread2 一次循环结束
thread1 一次循环开始
thread1 一次循环结束
可以看到,在不释放信号量的情况下,最多进入三次。
上一篇: 从零开始Swift之控制流
下一篇: Android开发 之 属性动画
推荐阅读
-
Java多线程系列(二十二)Semaphore使用
-
JAVA多线程:什么时候使用哪种实现方式 java多线程两种方式何时使用
-
ExecutorService使用 博客分类: java 多线程 多线程
-
使用多线程往同一个文件写入数据的线程安全的例子(java实现)
-
C++程序员学Java系列之十五:自定义类的简单使用
-
Java总结篇系列:Java多线程 博客分类: JAVAJAVA 线程
-
使用java的HttpClient实现多线程并发
-
Java多线程编程中使用Condition类操作锁的方法详解
-
Java多线程编程中使用Condition类操作锁的方法详解
-
使用java的HttpClient实现多线程并发