黑马程序员技术交流社区
标题:
线程问题
[打印本页]
作者:
chinese
时间:
2014-1-4 19:32
标题:
线程问题
package xiancheng;
class Shou implements Runnable{
int tick=1000;
Object a=new Object();
public void run(){
while(tick>0){
synchronized (a) {
System.out.println(Thread.currentThread().getName()+"run"+tick--);
}
}
}
}
public class MaiPiao {
public static void main(String[] args) {
// TODO Auto-generated method stub
Shou t=new Shou();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
复制代码
为什么打印结果只有一个线程输出,最后别的线程才输出。如
Thread-0run1000;
Thread-0run999;
...
Thread-0run1;
Thread-1run0;
Thread-2run-1;
Thread-3run-3;
作者:
周志彬
时间:
2014-1-4 19:59
你的机器运行速度过快 你可以尝试使用sleep()方法或者将
int tick=1000;改为
int tick=100000;
~~!奋斗
作者:
a844468138
时间:
2014-1-6 13:22
其实你说只出现Thread-0,是因为你的cpu执行速度太快的问题
因为cpu是随机给线程分配执行权的可以加上Thread.sleep()方法
至于出现负数的情况是因为当时4个线程已经都已经进入了run()方法,正在等待锁释放
第一个线程一执行结束,锁释放,剩下三个线程又会继续执行
所以也就出现了锁的问题
可以这样解决
try{
Thread.sleep(1);
if(tick>0)
System.out.println(Thread.currentThread().getName()+"run"+tick--);
}catch(Exception e)
{
}
问题解决
作者:
李凤鸣
时间:
2014-1-6 14:05
1这个随机的问题,每个电脑不一样
Thread-0一直占用,其他线程就没法进来,可以用Thread.sleep()延迟下
2出现0是因为
while(tick>0){
如果这里thread-2和thread-3,thread-1都先运行到这里,只有thread-1往下执行了
当thread1执行到tick=0时,
thread-2和thread-3在进入锁,就会出现负数
synchronized (a) {
System.out.println(Thread.currentThread().getName()+"run"+tick--);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2