Java线程问题

xue881013 2012-07-04 03:37:21

class ThreadInc implements Runnable{
@Override
public void run() {
ThreadDemo.printInc(5);
}
}
class ThreadDec implements Runnable{
@Override
public void run() {
ThreadDemo.printDec(3);
}
}
public class ThreadDemo {
private static int j = 0;
public synchronized static void printInc(int num){
for(int i = 0 ; i<num ; i++){
j++;
System.out.println("in inc j == " + j + " "+ Thread.currentThread().getName());
}
}
public synchronized static void printDec(int num){
for(int i = 0;i<num;i++){
j--;
System.out.println("in dec j == " + j + " "+ Thread.currentThread().getName());
}
}
public static void main(String[] args) {
ThreadInc i = new ThreadInc();
ThreadDec d = new ThreadDec();
new Thread(i).start();
new Thread(i).start();

new Thread(d).start();
new Thread(d).start();
}
}

输出结果为:
in inc j == 1 Thread-1
in inc j == 2 Thread-1
in inc j == 3 Thread-1
in inc j == 4 Thread-1
in inc j == 5 Thread-1
in dec j == 4 Thread-3
in dec j == 3 Thread-3
in dec j == 2 Thread-3
in inc j == 3 Thread-0
in inc j == 4 Thread-0
in inc j == 5 Thread-0
in inc j == 6 Thread-0
in inc j == 7 Thread-0
in dec j == 6 Thread-2
in dec j == 5 Thread-2
in dec j == 4 Thread-2

为什么执行完第一个new Thread(i).start();之后不执行第二个new Thread(i).start();
启动多个线程之后 是由OS决定执行哪个线程么
谢谢
...全文
101 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

所有的线程都会执行,只是执行的顺序不一样而已,确实是os选中的。。
貌似2楼911的贴被删了。。
[/Quote]
+1
javabugsmaker 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

执行内容太少,还没等第二个线程正式启动,第一个线程已经执行完毕了。

如果你想看点效果,要么增加循环次数,要么循环内增加 Thread.yield();
[/Quote]

我靠,为什么第一次访问没访问到。。
javabugsmaker 2012-07-04
  • 打赏
  • 举报
回复
所有的线程都会执行,只是执行的顺序不一样而已,确实是os选中的。。
貌似2楼911的贴被删了。。
MiceRice 2012-07-04
  • 打赏
  • 举报
回复
执行内容太少,还没等第二个线程正式启动,第一个线程已经执行完毕了。

如果你想看点效果,要么增加循环次数,要么循环内增加 Thread.yield();

62,621

社区成员

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

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