Java 线程优先级无效
我正在用Java编写一个饥饿模拟。然而,当我运行它时,它几乎在任何时候都不工作。我在研究MacOS。代码如下:Java 线程优先级无效,java,concurrency,starvation,Java,Concurrency,Starvation,我正在用Java编写一个饥饿模拟。然而,当我运行它时,它几乎在任何时候都不工作。我在研究MacOS。代码如下: public class StarvationNew { private static SharedObject sharedObject = new SharedObject(); // to jest ten obiekt (operacja) na ktorym sie blokuje private static volatile boolean isActive = true
public class StarvationNew {
private static SharedObject sharedObject = new SharedObject(); // to jest ten obiekt (operacja) na ktorym sie blokuje
private static volatile boolean isActive = true;
public static void main(String[] args) {
Thread t1 = new Thread(new Worker(), "Thread_1");
Thread t2 = new Thread(new Worker(), "Thread_2");
Thread t3 = new Thread(new Worker(), "Thread_3");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MAX_PRIORITY);
t3.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
t3.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
isActive = false;
}
private static class Worker implements Runnable {
private int runCount = 0;
@Override
public void run() {
while(isActive) {
sharedObject.playOperation();
runCount++;
}
System.out.println("--------");
System.out.println(Thread.currentThread().getName() + " ended with: " + runCount);
System.out.println("--------");
}
}
}
SharedObject只是模拟长时间运行的操作,如下所示:
public class SharedObject {
public synchronized void playOperation() {
try {
// long operations
System.out.println(Thread.currentThread().getName());
Thread.sleep(150);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
我想知道这段代码中的错误是什么。在使用Java线程时,有几件事需要记住
查看更多详细信息。你说不工作是什么意思?我知道Java程序只是操作系统的提示,但在我的例子中,几乎没有任何编译代码显示线程3不足。模拟饥饿的代码概念可以吗?谢谢你的帮助。我在Windows上运行了我的代码,它运行得很好,但这是一个饥饿的“好”例子,还是我应该考虑其他事情?@TomKo1不确定你所说的“饥饿”是什么意思。请定义它。我的意思是,一个贪婪的线程正在占用共享资源,并提供(有时他们获得访问权)其他线程来访问它。我的讲师曾经拒绝了我的代码,因为我在方法名的前面使用了synchronized关键字。饥饿在这里被描述为@TomKo1,我认为这是一个很好的例子,线程1使其他线程饥饿。
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_1
Thread_3
--------
Thread_1 ended with: 34
--------
--------
Thread_2
Thread_3 ended with: 1
--------
--------
Thread_2 ended with: 1
--------