gpt4 book ai didi

Java线程,在一个线程运行时挂起多个其他线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:43 26 4
gpt4 key购买 nike

我正在尝试了解我正在执行的部分作业的并发性。我认为我已经完成了基础工作,但我陷入了用例的细微差别。

如果我还没有掌握问题的艺术,我提前道歉。

基本思路:

我有一个类,其中一些对象被实例化为房屋部分的表示,它们唯一的主要功能是 operate()。要注意的是,当“Bell”运行时,我希望其他人等待()。我的 while 语句基于响铃切换( boolean 值)。如果它在 - wait(),如果没有,继续。似乎在运行这个程序时,为了“Bell”,我正在饿死其他线程对象。

对我哪里出错有什么想法吗?

import java.util.ArrayList;

class Test extends Thread {
static int number = 0;
private static final int TIMES = 30;
private static boolean bellstatus = false;
private String name;
private int val;

Test(String y,int x) {
number = number +1;
val = x;
name = new String(y);
}
public void run() { // overrides default run()

for (int i=val; i>0; i--){
System.out.println(name+" run() : " + i);
operate();
}
}

public synchronized void operate(){
System.out.println(name+ " operating");

while(bellstatus){
try{
System.out.println("Bell is ringing");
wait();}catch(InterruptedException e){}
}

if(name.equals("Bell")){
try{
System.out.println("Bell working");
bellstatus = true;
Thread.sleep(500);
Thread.yield();}catch(InterruptedException e){}
bellstatus = false;
notifyAll();
System.err.println("Bell is done");
}

if(name.equals("Door")){
try{
System.out.println("Door working");
Thread.sleep(500);}catch(InterruptedException e){}
}
if(name.equals("Window")){
try{
System.out.println("Window working");
Thread.sleep(500);}catch(InterruptedException e){}
}
}




public static void main(String arg[]) {
ArrayList<Test> example = new ArrayList();
Test a = new Test("Bell",20);
Test b = new Test("Door",20);
Test c = new Test("Window",20);// create thread

example.add(a);
example.add(b);
example.add(c);

System.out.println("Number of objects: "+a.number);
for(int i = 0;i<example.size();i++)
example.get(i).start();


// start thread run

}
}

最佳答案

只使用一个线程和一个可运行队列。只有一个线程的执行程序会将您的任务排入队列,直到完成一个正在运行的任务 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executor.html

关于Java线程,在一个线程运行时挂起多个其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896078/

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