关于线程

xiay365 2003-11-22 05:20:21
请问:有3个线程,一个对象和对象的一个方法method,如何使3个线程按照特定的顺序正确运行。比如:线程1执行method方法20次后,线程2才可以执行,线程2执行method方法20次后,线程3才可以运行。
...全文
29 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiay365 2003-11-23
  • 打赏
  • 举报
回复
感谢各位,特别感谢bw78619(Genghis Khan),结贴。每人都有分
xiaohaiz 2003-11-23
  • 打赏
  • 举报
回复
请自己去查阅Active Object模式,对你问题的解决可能也有帮助。
这是一种实现线程的老技术,对于你要求序列执行的任务很合适。和COMMAND模式也可以结合在一起。
totti0115 2003-11-23
  • 打赏
  • 举报
回复
up,来学习了,今天晚上在来做回答
xiay365 2003-11-23
  • 打赏
  • 举报
回复
问题:
本程序只有两个类:
1、一个Talk类;
2、一个TalkingThread类。

对Talk类的编程要求,成员变量可自行定义,但只有下述三个函数:
1、构造函数;
2、main函数;
3、print(String Speaker,String Content),该方法内只有五行代码,如下:
for(int i=0;i<20;i++){ //讲二十次
System.out.println(Speaker+"第"+i+"次说话:"+Content+"\n");
out.println(Speaker+"第"+i+"次说话:"+Content+"\n");
out.flush();
}
其中,变量out的类型是PrintWriter。

对TalkingThread类的编程要求,TalkingThread类是一个线程类。

其他要求:在Talk类的main函数中构建三个TalkingThread类的线程对象,三个线程的名字分别是“线程1”、

“线程2”和“线程3”。三个线程使用同一个Talk类的对象,调用其print方法。编写好这两个类后,编译运行

的结果要求线程1、线程2、线程3依次按顺序“说话”,也就是说,线程1的20次“说话”完毕后,线程2才能够

说话;线程2的20次“说话”完毕后,线程3才能够说话。该运行结果也会存到和该类文件同一目录的文本文件

“test.txt”中。
本以为我提的问题可以解决我的问题,可是发现不是这样?麻烦楼上的,再帮我一下,我都考虑2天了,不想再考虑了,你帮我解决后,分数多给你一些,谢谢。
bw78619 2003-11-22
  • 打赏
  • 举报
回复
忘了写上wait()方法应当包含在try{
wait();
}catch(InterruptedException e){
}中。
线程间的通讯通过synchronzed,wait(),notify()一定可以解决,不要使用设置优先级的方法,线程调度依赖于操作系统,那样是不可靠的;
也不要使用suspend(),resume(),极易死锁,在java 2中已经被去掉了。
bw78619 2003-11-22
  • 打赏
  • 举报
回复
class JApp
{
private class Semophore
{
public int s;
}
private Semophore S1 = new Semophore();
private Semophore S2 = new Semophore();
public JApp()
{
new Thread() //thread one
{
public void run()
{
synchronized(S1){
for(int i=0; i<20; i++)
{
method();
S1.s++;
}
S1.notify();
}
}
}.start();
new Thread() //thread two
{
public void run()
{
synchronized(S1){
while(S1.s<20)
S1.wait();
synchronized(S1){
for(int i=0; i<20; i++){
method();
S2.s++;
}
S2.notify();
}
}
}
}.start();
new Thread() //thread three
{
synchronized(S2){
while(S2.s<20)
wait();
method();
}
}.start();
}
public void method()
{
//todo something
}
}

我编了个俄罗斯方块,里面有三个线程之间进行着同步与互斥,或许可以给你一些参考,需要的话发邮件给我 NicotineOne@yahoo.com.cn
broadoceans 2003-11-22
  • 打赏
  • 举报
回复
可以使用wait()和notify()方法,这是java推荐的方法。
如果你把你的程序拿来,我可以将你改一下;
xiay365 2003-11-22
  • 打赏
  • 举报
回复
另补充:我主要的疑问是线程之间的通信问题,如果线程很多,是不是每个线程都设置优先级呢?我对进程之间的并发运行和通信不是很了解,希望高手行家能通过本例给鄙人一点启示。希望找到一种通用一点的办法,并不失效率。我的意思是说如果10个线程的话,也可以用这种思想。
xiay365 2003-11-22
  • 打赏
  • 举报
回复
补充编程要求:1、不使用设置优先级。2、不使用Java不推荐的方法。因为设置优先级谁都会,而使用java不推荐的方法后果可想而知。希望能够将步骤写的更详尽些。一旦本人从中受到启发,立刻结贴散分。谢谢。
broadoceans 2003-11-22
  • 打赏
  • 举报
回复
让线程1处于运行态(start)而线程2、线程3处于休眠态(suspend()).当线程1mothod方法执行20次后,让线程2处于运行态(resume()方法)以此类推。
注意编译时要使用-deprecated 选项。
giftxi 2003-11-22
  • 打赏
  • 举报
回复
设置优先级,然后搞个计数器,应该就可以了。

62,616

社区成员

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

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