| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 544 人关注过本帖
标题:请教一个线程的问题
只看楼主 加入收藏
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
结帖率:0
收藏
 问题点数:0 回复次数:7 
请教一个线程的问题

class Lt9_2
{
public static void main(String args[])
{
People teacher=new People(),
student=new People();
for(int i=1;i<=5;i++)
{
teacher.start();
student.start();
}
}
}
class People extends Thread
{
public void run()
{
if(Thread.currentThread().getName().equals("teacher"))
{
System.out.println("我是老师");
}
else if(Thread.currentThread().getName().equals("student"))
{
System.out.println("我是学生");
}
}
}

编译时报错:
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:571)
at Lt9_2.main(ThreadTest.java:470)

Process completed.
请问是什么错呢?应该怎么改?

[此贴子已经被作者于2007-11-2 12:28:13编辑过]

搜索更多相关主题的帖子: 线程 
2007-11-02 12:25
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
因为你的两个线程重复了start(),每个线程只需要一次start()就可以了,如果你想看你要的那种效果的话可以把for循环放在run()里面

I'm here, as always...
2007-11-02 12:37
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
收藏
得分:0 
class Lt9_2
{
public static void main(String args[])
{
People teacher=new People(),
student=new People();
teacher.start();
student.start();
}
}
class People extends Thread
{
public void run()
{
if(Thread.currentThread().getName().equals("teacher"))
{
System.out.println("我是老师");
}
else if(Thread.currentThread().getName().equals("student"))
{
System.out.println("我是学生");
}
}
}
怎么我把for循环去掉后没有输出呢?不是应该teacher.start()启动了线程会自动调用run()方法吗?

[url]www.[/url]欢迎大家的光临,一起交流学习
2007-11-02 13:22
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
一个线程只能被启动一次

可惜不是你,陪我到最后
2007-11-02 13:45
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
Thread.currentThread().getName()返回的是自动赋予的名字。。。
不是teacher,student...为thread-0,thread-2
2007-11-02 13:47
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
收藏
得分:0 
People teacher=new People(),
student=new People();
千里的意思是说这个两个创建的是同一个线程?

[url]www.[/url]欢迎大家的光临,一起交流学习
2007-11-03 21:04
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
收藏
得分:0 
class Lt9_2
{
public static void main(String args[])
{
Teacher teacher=new Teacher();
Student student=new Student();
Student student1=new Student();
teacher.start();
student.start();
student1.start();
}
}
class Teacher extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println("我是老师");
}
}
}
class Student extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println("我是学生");
}
}
}
这样又可以正确运行了啊!

[url]www.[/url]欢迎大家的光临,一起交流学习
2007-11-03 21:09
netstriker
Rank: 1
等 级:新手上路
威 望:1
帖 子:257
专家分:0
注 册:2007-3-24
收藏
得分:0 
其实好像千里那样说,线程只可以调用一次,但是它的意思是说 run 这一个方法不能在for语句里.只能启动一次,
如果像以下代码那样这样没有问题了

class Lt9_2
{
public static void main(String args[])
{
People teacher=new People(), student=new People();
// for(int i=1;i<=5;i++)
// {
teacher.setName("teacher"); <--加上这两句
student.setName("student");
teacher.start();
student.start();
// }
}
}
class People extends Thread
{
public void run()
{
if(Thread.currentThread().getName().equals("teacher"))
{
System.out.println("我是老师");
}
else if(Thread.currentThread().getName().equals("student"))
{
System.out.println("我是学生");
}
}
}
2007-11-03 21:40
快速回复:请教一个线程的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017341 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved