控制某个方法允许并发访问线程的个数:
Semaphore semaphore = new Semaphore(5,true);//最多5个线程访问
写在被线程调用的方法中
> semaphore.require()-->申请一个线程的请求
>semaphore.release()-->释放一个线程的请求
多个线程共享一个变量的值不发生冲突的实现:
(利用Semaphore来请求是否允许执行通过阻塞线程实现)
Semaphore 的构造参数是当前同时访问含有
semaphore.require()–>申请一个执行当前线程,如果当前执行的线程数量没有超过构造参数设置的数量,就能执行当前线程
semaphore.release()—>当前线程执行完后释放permit>允许执行数量
两个方法的方法 的线程数量
public static void main(String[] args) {
Thread threadA = new Thread(){public void run() {
try {
semaphore.acquire();
count=10;
} catch (InterruptedException e) {
e.printStackTrace();
}
semaphore.release();
}};
Thread threadB = new Thread(){public void run() {
try {
semaphore.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程B数据为:"+count);
semaphore.release();
}};
Thread threadC = new Thread(){public void run() {
try {
semaphore.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
semaphore.release();
System.out.println("线程C数据为:"+count);
}};
threadA.start();
threadB.start();
threadC.start();
}