和java线程有关

zoutuo 2009-10-07 11:26:12
有这样一个需求:
有a()和b()两个方法。
写一个线程,要求调用a()方法的几秒种后,调用b()方法。
其中a()方法是一个循环体【while(true)】,也就是一个死循环。b()方法也是一循环体(同a()方法)。
我看了timer类,可好象不行。如何实现这个需求?
...全文
210 18 打赏 收藏 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
frech0better 2009-10-08
  • 打赏
  • 举报
回复
这就是消费者和生产者问题,自己写个喽,很简单的
o_range 2009-10-08
  • 打赏
  • 举报
回复
学习下
chunlong0202 2009-10-08
  • 打赏
  • 举报
回复
用Thread 或者Runnable
java1109 2009-10-08
  • 打赏
  • 举报
回复
学习
舷Kelvin 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fhb520 的回复:]
引用 6 楼 liuc0317 的回复:
在a()中写Thread.sheep(1000)!然后再调用b() !不就OK了

好像是这个意思,,楼住怎么问这么简单的问题啊?
[/Quote]

这两人还真有脸瞎胡扯。

写在a()里算干什么?这是会自己醒来的。符合题目要求吗?而且sleep都写错。
舷Kelvin 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 zoutuo 的回复:]
有这样一个需求:
有a()和b()两个方法。
写一个线程,要求调用a()方法的几秒种后,调用b()方法。
[/Quote]

说明还没有说清楚,调用b方法的时候,a方法要停止吗?

无论哪种情况,都涉及三个线程,1是控制线程,一般就是main函数的线程,2是a方法的线程,3是b方法的线程

如果要停止,那就用interrupt中断a的线程,再用start打开b的线程。

如果不停止,那就是直接在开始了a线程之后几秒,开始b线程。

我觉得既然是线程题,题目的意思应该是后一种情况吧
舷Kelvin 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 zoutuo 的回复:]
有这样一个需求:
有a()和b()两个方法。
写一个线程,要求调用a()方法的几秒种后,调用b()方法。
[/Quote]

说明还没有说清楚,调用b方法的时候,a方法要停止吗?

无论哪种情况,都涉及三个线程,1是控制线程,一般就是main函数的线程,2是a方法的线程,3是b方法的线程

如果要停止,那就用interrupt中断a的线程,再用start打开b的线程。

如果不停止,那就是直接在开始了a线程之后几秒,开始b线程。

我觉得既然是线程题,题目的意思应该是后一种情况吧
zoutuo 2009-10-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huhk 的回复:]
你需要在调用b函数时再起一个线程。用Thread 或者Runnable
[/Quote]

忘记说了,a()和b()是A类和B类里的两个方法。A、B两个类本身就继承自Thread类。。。请给出具体的方法,谢谢!!
Wwushuang 2009-10-07
  • 打赏
  • 举报
回复
是有点纠结 sleep不行呀
huhk 2009-10-07
  • 打赏
  • 举报
回复
你需要在调用b函数时再起一个线程。用Thread 或者Runnable
zoutuo 2009-10-07
  • 打赏
  • 举报
回复
也就是说,当调用b()时,a()并没有停止,而是继续运行。
「已注销」 2009-10-07
  • 打赏
  • 举报
回复
非线程实现

class A
{
void a(){
while(true)
{
a_fun();
}
}
void a_fun(){
//do sth here
}
};

class B
{
void b(){
while(true)
{
b_fun();
}
}
void b_fun(){
//do sth here
}
};

public class Main{
public static void main(String[] args)
{
A a = new A();
B b = new B();
long time;
while(true){
//运行a
time = System.currentTimeMillis()+10000;
while(System.currentTimeMillis() < time)
a.a_fun();
//运行b
time = System.currentTimeMillis()+10000;
while(System.currentTimeMillis() < time)
b.b_fun();
}
}
}
neverly 2009-10-07
  • 打赏
  • 举报
回复
你看看传智博客的视频会更明白的!
「已注销」 2009-10-07
  • 打赏
  • 举报
回复
上面代码实现了近似a,b线程交替执行循环10秒钟的功能
「已注销」 2009-10-07
  • 打赏
  • 举报
回复

class A extends Thread
{
void a(){
while(true)
{
synchronized(Main.lock){
while(Main.state != Main.A_RUNNING)
Main.lock.wait();
}
//do sth here
}
}

public void run(){
a();
}
};

class B extends Thread
{
void b(){
while(true)
{
synchronized(Main.lock){
while(Main.state != Main.B_RUNNING)
Main.lock.wait();
}
//do sth here
}
}

public void run(){
b();
}
};

public class Main{
static final byte START = 0;
static final byte A_RUNNING = 1;
static final byte B_RUNNING = 2;

static byte state = START;

static Object lock = new Object();

public static void main(String[] args) throws Exception
{
A a = new A();
B b = new B();
a.start();
b.start();
while(true){
//通知A运行
state = A_RUNNING;
synchronized(lock){
lock.notifyAll();
}
Thread.sleep(10000);//休眠
//通知B运行
state = B_RUNNING;
synchronized(lock){
lock.notifyAll();
}
Thread.sleep(10000);//休眠
}
}
}
fhb520 2009-10-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liuc0317 的回复:]
在a()中写Thread.sheep(1000)!然后再调用b() !不就OK了
[/Quote]
好像是这个意思,,楼住怎么问这么简单的问题啊?
liuc0317 2009-10-07
  • 打赏
  • 举报
回复
在a()中写Thread.sheep(1000)!然后再调用b() !不就OK了
wowFreshMan 2009-10-07
  • 打赏
  • 举报
回复
用一个线程作为控制线程,控制对a(),b()的调用(以前这么做过)

62,620

社区成员

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

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