java マルチスレッドch01最大でN个のスレッドまでが実行するパターン
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java マルチスレッドch01最大でN个のスレッドまでが実行するパターン相关的知识,希望对你有一定的参考价值。
import java.util.Random;
import java.util.concurrent.Semaphore;
class Log {
public static void println(String s) {
System.out.println(Thread.currentThread().getName() + ": " + s);
}
}
// 数の制限があるリソース
class BoundedResource {
private final Semaphore semaphore;
private final int permits;
private final static Random random = new Random(314159);
// permitはリソースの個数
public BoundedResource(int permits) {
this.semaphore = new Semaphore(permits);
this.permits = permits;
}
// リソースを使用する
public void use() throws InterruptedException {
semaphore.acquire();
try {
doUse();
} finally {
semaphore.release();
}
}
// リソースを実際に使用する(ここではThread.sleepしているだけ)
protected void doUse() throws InterruptedException {
Log.println("BEGIN: used = " + (permits - semaphore.availablePermits()));
Thread.sleep(random.nextInt(500));
Log.println("END: used = " + (permits - semaphore.availablePermits()));
}
}
// リソースを利用するスレッド
class UserThread extends Thread {
private final static Random random = new Random(26535);
private final BoundedResource resource;
public UserThread(BoundedResource resource) {
this.resource = resource;
}
public void run() {
try {
while (true) {
resource.use();
Thread.sleep(random.nextInt(3000));
}
} catch (InterruptedException e) {
}
}
}
public class Main {
public static void main(String[] args) {
// 3個のリソースを用紙
BoundedResource resource = new BoundedResource(3);
// 10個のスレッドが利用する
for (int i = 0; i < 10; i++) {
new UserThread(resource).start();
}
}
}
以上是关于java マルチスレッドch01最大でN个のスレッドまでが実行するパターン的主要内容,如果未能解决你的问题,请参考以下文章
sh マルチスレッド风の处理(击)
csharp [WPF]别スレッドで别别ン示示示示示示
csharp [WPF]别スレッドでUIスレッドを立ててそこから窗口を表示
csharp 别スレッドからメインスレッドのコントロールにアクセスするラムダ式
csharp 【WPF】セカンダリスレッド上で発生した未处理の例外の対处
javascript スプレッド演算子