请问如何让一个方法同时只有2个线程在调用.

ifsggak 2008-10-30 10:08:56
加精
比如下面这个类
class test{
public void methodA(){
//methodA同时有多个线程在访问,请问如何填充这个方法,使最多只有2个线程调用methodB,当调用完成后,其他那些方法才能继续调用
methodB();

}
private void methodB(){

}
...全文
1899 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
南京创业者 2008-11-21
  • 打赏
  • 举报
回复
mark
macleane 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ThirstyCrow 的回复:]
Java codepackage sample.concurrent;

import java.util.concurrent.Semaphore;

public class Test {

private final Semaphore available = new Semaphore(2);

public void methodA() {
try {
available.acquire();
methodB();
available.release();
} catch (InterruptedException ex) {
}
}

public void methodB() {

[/Quote]

顶你

methodB应该设成private吧
wp_stork 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ThirstyCrow 的回复:]
Java codepackage sample.concurrent;

import java.util.concurrent.Semaphore;

public class Test {

private final Semaphore available = new Semaphore(2);

public void methodA() {
try {
available.acquire();
methodB();
available.release();
} catch (InterruptedException ex) {
}
}

public void methodB() {

[/Quote]

学习了!
perperyu 2008-11-18
  • 打赏
  • 举报
回复
studying
coshep 2008-11-09
  • 打赏
  • 举报
回复
太不错啦!
hansuhai000 2008-11-02
  • 打赏
  • 举报
回复
haitr 2008-11-02
  • 打赏
  • 举报
回复
来学习了
yyh84yangtao 2008-11-01
  • 打赏
  • 举报
回复
学习中,顶!
yyh84yangtao 2008-11-01
  • 打赏
  • 举报
回复
学习中,顶!
szuJobs 2008-11-01
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 abc130314 的回复:]
引用 29 楼 nj_dobetter 的回复:
自定义一个Semaphore类,
利用该类对象上的锁,以及wait(), notifyAll()方法配合使用。

初始值: Semaphore s=new Semaphore(2);

经典的设计啊
Java codepublicclassMainextendsThread {privatestaticfinalintMAX_THREAD=3;privatestaticfinalInteger[] locks={1,2,3};privatestaticintpos=0;//private Random r = new Random();//private static int s = 0;publicsynchronizedstaticIn…
[/Quote]
szuJobs 2008-11-01
  • 打赏
  • 举报
回复
Semaphore
zq934135 2008-11-01
  • 打赏
  • 举报
回复
可以用java本身提供的线程池来实现,它可以定义最大运行的线程数,安全方便,不用你自已的逻辑去实现!!
maomaomao_1984 2008-10-31
  • 打赏
  • 举报
回复
java 有同步函数的概念。。。 来做线程同步,不知道搂住这样做的目的是什么?有意的这样限制不是太好。。。。
cydp007 2008-10-31
  • 打赏
  • 举报
回复
方法里面设置一个变量...

线程调用后 -1 释放后在线程内 +1 .

来控制. 这样就好.
nj_dobetter 2008-10-31
  • 打赏
  • 举报
回复
自定义一个Semaphore类,
利用该类对象上的锁,以及wait(), notifyAll()方法配合使用。

初始值: Semaphore s=new Semaphore(2);
kevincool998 2008-10-31
  • 打赏
  • 举报
回复
ding....
panpengpeng 2008-10-31
  • 打赏
  • 举报
回复
在外部设置变量作为开关,在方法内部先判断,如果在符合条件则进入执行,在函数内部还要先修改这个变量,
防止下次再执行,在函数执行到最后将开关变量修改回去
ryb_cool 2008-10-31
  • 打赏
  • 举报
回复
收藏
cuijie_cn 2008-10-31
  • 打赏
  • 举报
回复
好问题!
ThirstyCrow 2008-10-31
  • 打赏
  • 举报
回复
package sample.concurrent;

import java.util.concurrent.Semaphore;

public class Test {

private final Semaphore available = new Semaphore(2);

public void methodA() {
try {
available.acquire();
methodB();
available.release();
} catch (InterruptedException ex) {
}
}

public void methodB() {
System.out.println(Thread.currentThread().getName() + ": " + "Entering methodB ...");
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
}
System.out.println(Thread.currentThread().getName() + ": " + "Leaving methodB ...");
}

public static void main(String[] args) {
final Test t = new Test();
for (int i = 0; i < 10; i++) {
new Thread() {
@Override
public void run() {
t.methodA();
}
}.start();
}
}
}

加载更多回复(27)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧