线程-为什么就一个线程在执行

人生就这样 2017-06-20 08:37:05
package test4;

public class ThreadDemo {
public static void main(String[] args) {
demow d = new demow();
Thread t = new Thread(d, "1");
Thread t1 = new Thread(d, "2");
t.start();
t1.start();

}
}

class demow implements Runnable {
private int num = 0;

@Override
public void run() {
show();
}

public void show() {
synchronized (this) {
while (num < 100) {
System.out.println(Thread.currentThread().getName() + ",num=" + num++);
}
}
}
}
...全文
223 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
galiniur0u 2017-06-21
  • 打赏
  • 举报
回复
楼主的程序的问题导致线程2看起来没有运行,因为楼主对this加了锁,线程1运行后线程2需要等待线程1释放锁。由于线程变量都是一个也就是d,此时线程1和线程2是共享num变量的。当线程1释放了锁之后,线程2运行发现num已经大于100,不符合进入循环的条件,直接退出了。所以看上去线程2没有执行。 楼主可以在synchronized锁和while之间打印一下System.out.println(Thread.currentThread().getName() + ",num:" + num);,就可以得到验证了。
dlhansy 2017-06-20
  • 打赏
  • 举报
回复
第二个线程跑起来了,只不过运行到同步方法时阻塞,等第一个线程循环结束后释放锁,由于第二个线程和第一个线程共享循环变量,第二个线程无法进入循环了
人生就这样 2017-06-20
  • 打赏
  • 举报
回复
当前运行的线程的名字
soton_dolphin 2017-06-20
  • 打赏
  • 举报
回复
输出是什么?怎么确定只有一个线程在跑?

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧