问个Java多线程的问题,麻烦大家了

spzktshow 2011-02-20 01:34:55
[code=Jav]
public class Example1 {
public static void main(String args[])
{
TestThread2 testthread2 = new TestThread2();
TestThread1 testthread = new TestThread1();

new Thread(testthread2).start();
new Thread(testthread).start();

}
}
class TestThread1 implements Runnable
{
public void run()
{
for (int i = 0; i < 10; i ++)
{
System.out.println("TestThread1 在运行");
}
}
}
class TestThread2 implements Runnable
{
public void run()
{
for (int i = 0; i < 10; i ++)
{
System.out.println("TestThread2 在运行");
}
}
}
[/code]

我写了一段多线程example,可以运行出来和我预期的不一样,以下是我的运行结果
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread2 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行
TestThread1 在运行

而且期望的结果是:

TestThread2 在运行
TestThread1 在运行
交替出现
请问我写的地方有什么不对么?

...全文
78 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
i李小武 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhzxlc_06 的回复:]

[code=Ja]class TestThread1 implements Runnable {

public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println("TestThread1 在运行");
……
[/Quote]
如果真的要实现线程交替,这个是不行的,需要锁进行同步
幽饮烛 2011-02-20
  • 打赏
  • 举报
回复
这个是线程调度的问题,LZ 对理线程的概念理解错了。
chaoliu1024 2011-02-20
  • 打赏
  • 举报
回复
[code=Jav]class TestThread1 implements Runnable {

public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println("TestThread1 在运行");
Thread.sleep(500); // 休眠一下
}
} catch (InterruptedException e) {
}
}
}

class TestThread2 implements Runnable {

public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println("TestThread2 在运行");
Thread.sleep(600);
}
} catch (InterruptedException e) {
}
}
}
[/code]
spzktshow 2011-02-20
  • 打赏
  • 举报
回复
但是我看多线程的列子里面好像都这么写,结果也是交替执行的?
silenceburn 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 spzktshow 的回复:]
2楼...我一直以为并行处理的结果就是两个TestThread的run方法交替执行....
[/Quote]
。。。。。。。。。。。。。。。。。
spzktshow 2011-02-20
  • 打赏
  • 举报
回复
2楼...我一直以为并行处理的结果就是两个TestThread的run方法交替执行....
thegodofwar 2011-02-20
  • 打赏
  • 举报
回复
你要实现期望结果一是可以采用单线程,二还是使用多线程(使用lock或者wait+notify)
  • 打赏
  • 举报
回复
为什么要交替出现?采用多线程目的就是为了让其并行处理的。
silenceburn 2011-02-20
  • 打赏
  • 举报
回复
你机器太快了,1号线程还没来得及启动,2号线程已经跑完了
把run改一改,稍微sleep一下,就能看的很清楚了

在 run() 里面 的 System.out.println 后面加上
Thread.sleep(5);

62,614

社区成员

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

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