在一个继承了Thread的类中
其中有一个方法实现了Runnable
这样做奇怪么?在一个线程类中,想同时开启多个线程做不同的事情
做法如下:
在一个继承了Thread的类中
run方法做了一件事情,同时调用了方法A
A方法中实现了一个Runnable,去实现另一件事
按上面的做法,奇怪么?如果要实现这样的要求
通常如何解决呢?
其中有一个方法实现了Runnable
这样做奇怪么?在一个线程类中,想同时开启多个线程做不同的事情
做法如下:
在一个继承了Thread的类中
run方法做了一件事情,同时调用了方法A
A方法中实现了一个Runnable,去实现另一件事
按上面的做法,奇怪么?如果要实现这样的要求
通常如何解决呢?
在一个线程类中,想同时开启多个线程做不同的事情,这个是可以实现的。
但是这个同时不是真正意义上的同时,java技术中的线程是支持优先级调度,也就是说同时只能有一个线程在执行(限于单核处理器)。
下面用一个火车票售票的实例给你说说:
class TicketsSystem
{
public static void main(String[] args)
{
SellThread st=new SellThread();//实例化一个线程对象
new Thread(st).start(); //启动四个线程进行卖票
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}class SellThread implements Runnable //定义一个线程类
{
int tickets=100;//假设总共有100张票
Object obj=new Object(); //用于同步监视
public void run() //重写Runnable的run方法
{
while(true)
{
synchronized(obj)//使多个线程同步进行
{
if(tickets>0)//只要大于0,就打印票信息
{
System.out.println("obj:"+Thread.currentThread().getName()+
" sell tickets:"+tickets);
tickets--;//票数减一
}
}
}
}
}
好好看看吧
希望能解答你的问题
...
private Executor pool = Executors.newFixedThreadPool(1);
... public void run() {
//这里面做了第一件事情
} public void methodA() {
pool.execute(new Runnable() {
public void run() {
//这里面做了第二个事情
}
});
}
}我的问题是,对于MyClass这个类来说,如此设计是否合理,
如果想实现类似这样的操作,通常应当如何设计?