学习线程,请问线程输出停顿有关问题
学习线程,请教线程输出停顿问题
我启动了10个线程, 每个线程输出i++的值,其中做了个判断,当i为5时当前线程sleep(2000),为什么后边的线程输出的时候也跟着停顿? PS:源码:
public class TestThread {
public static void main(String[] args) throws InterruptedException {
for(int i = 0; i<10; i++){
TestRunnable b = new TestRunnable();
Thread t = new Thread(b);
t.start();
}
}
}
class TestRunnable implements Runnable{
@Override
public void run() {
try{
if(i == 5 ){
Thread.currentThread().sleep(2000);
}
System.out.println(i++);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
private static int i=0;
}
------解决方案--------------------
逻辑不对.i=5的时候你让他sleep.也没放他继续哈
------解决方案--------------------
private static int i=0;
根本就是所有线程共享同一个i,当第一次System.out.println(i++);让i变成5以后,
当然后面的几个线程就都全部停顿2秒了,因为在停顿完毕之前没有线程去继续i++了。
------解决方案--------------------
------解决方案--------------------
我启动了10个线程, 每个线程输出i++的值,其中做了个判断,当i为5时当前线程sleep(2000),为什么后边的线程输出的时候也跟着停顿? PS:源码:
public class TestThread {
public static void main(String[] args) throws InterruptedException {
for(int i = 0; i<10; i++){
TestRunnable b = new TestRunnable();
Thread t = new Thread(b);
t.start();
}
}
}
class TestRunnable implements Runnable{
@Override
public void run() {
try{
if(i == 5 ){
Thread.currentThread().sleep(2000);
}
System.out.println(i++);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
private static int i=0;
}
------解决方案--------------------
逻辑不对.i=5的时候你让他sleep.也没放他继续哈
------解决方案--------------------
private static int i=0;
根本就是所有线程共享同一个i,当第一次System.out.println(i++);让i变成5以后,
当然后面的几个线程就都全部停顿2秒了,因为在停顿完毕之前没有线程去继续i++了。
------解决方案--------------------
------解决方案--------------------
- Java code
public class TestThread { public static void main(String[] args) throws InterruptedException { for(int i = 0; i<10; i++){ TestRunnable b = new TestRunnable(); Thread t = new Thread(b); t.start(); } } } class TestRunnable implements Runnable{ public void run() { try{ if(i == 5 ){ System.out.println(Thread.currentThread().getName()+" will sleep 2 seconds...."); Thread.currentThread().sleep(2000); System.out.println(Thread.currentThread().getName()); } System.out.println(Thread.currentThread().getName() +" running :" + i++); }catch (InterruptedException e) { e.printStackTrace(); } } private static int i=0; }
------解决方案--------------------
线程的顺序不是规范的 这是正常现象 就因为这种情况才会出现悲观锁