gpt4 book ai didi

java - 在队列中等待的线程,Java

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:38 25 4
gpt4 key购买 nike

我的处境很棘手。我知道这几乎是我现在能得到的,但我想做的实际上是创建一个线程数组(或多个线程)并容纳队列中的线程数量,因此例如我可以一次容纳3个线程,我让前3个线程运行,然后让另一个等待,当有空闲时,例如1个空闲或终止,另一个可以开始运行。

我还想确定如果正在运行的线程与另一个线程的性别相同,该线程是否可以运行。

    Thread myThreads[] = new Thread[LN.GetLine().length()];
int l=LN.GetLine().length();
for (int j = 0; j < LN.GetLine().length(); j++) {
String Name = CR.Gender(LN.GetLine().charAt(j)) + j;
myThreads[j] = new Thread(new MyThread(Name,LN));
myThreads[j].setPriority(l);
System.out.println(myThreads[j].toString());
l--;
}
for(int b=0;b<LN.GetLine().length();b++){
myThreads[b].start();
synchronized(myThreads[b]){
try{
myThreads[b].wait();
}catch(InterruptedException e){
e.printStackTrace();
}

}

}

现在我能做的就是容纳或一次运行 1 个线程。

(是的,这是机器浴室问题)

我真正的问题是。如果我在 myThread() 中编辑具有 wait() 的函数 run() ,或者只是简单地放置 System.out.println(getName() + "is using"); 线程如何在其 run() 函数中知道其他线程正在运行。

 public class MyThread extends Thread {
public MyThread(String id) {
super(id);
}
public void run(){
System.out.println(getName() + " is Using");
>>>Put wait if other thread running<<<<
>>>If can use or not if same gender<<<<
}

或者我应该在外面实现它?或者把等待放在外面?另外,我对线程非常陌生,所以我还没有真正探索过 sleep 和中断。

最佳答案

您无需等待即可执行此操作。

这是一个例子:

public class MyThread extends Thread {
static final Object gender1Lock = new Object();
static final Object gender2Lock = new Object();
int gender;
public MyThread(String id, int gender) {
super(id);
this.gender = gender;
}
public void run(){
System.out.println(getName() + " is waiting");
if(gender == 1){
synchronized(gender1Lock){ // ocupy gender 1
System.out.println(getName() + " is Using");
}
}else if(gender == 2){
synchronized(gender1Lock){ // ocupy gender 2
System.out.println(getName() + " is Using");
}
}
}
}

由于一次只有一个线程可以在对象上同步,这意味着一次只能运行一个给定性别的线程。这将创建给定性别的所有线程的顺序执行。

这是使用这种线程的示例。

for(int i = 0; i < 20; i++){
new MyThread("Person " + i, (i%2 == 0) ? 1 : 2).start();
}

关于java - 在队列中等待的线程,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39807698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com