java多线程小问题
各位大大,以下这段程序,在if语句中,“让线程先打印再sleep”和“让线程先sleep再打印”,结果为什么会不同?如果先sleep的话,只有一个线程在跑,why why why。。。急问
class Sell implements Runnable {
int ticket = 50;
String str = "";
public void run() {
while(true) {
synchronized(str) {
if(ticket > 0) {
try {Thread.sleep(100);} catch(Exception e) {}
System.out.println(Thread.currentThread().getName() + " is selling ticket " + ticket--);
//try {Thread.sleep(100);} catch(Exception e) {}
}
}
}
}
}
class TestSell {
public static void main(String args[]) {
Sell s1 = new Sell();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
}
}
[解决办法]
你这程序始终都会只有一个线程在跑好不,又是死循环的跑,又是加了锁的,同一时间只有一个线程执行
[解决办法]
我在自己机器上跑这段代码,都是多个线程啊,你ticket设大一点,跑跑呢,线程的运行和java虚拟机也有关系吧
[解决办法]
经过测试,结果都是一样的啊...
[解决办法]
我加大到500时,先休眠的方式也会几个线程都能卖票,但某个线程一旦获得机会,就会很长时间获得运行机会。而后休眠的方法,几个线程获得机会更均匀,每个线程都卖不了10张,其他线程就会得到机会。可能和机器有关系。
[解决办法]
java多线程小疑点
java多线程小问题各位大大,以下这段程序,在if语句中,“让线程先打印再sleep”和“让线程先sleep再打印”,结果
