在一个继承了Thread的类中
其中有一个方法实现了Runnable
这样做奇怪么?在一个线程类中,想同时开启多个线程做不同的事情
做法如下:
在一个继承了Thread的类中
run方法做了一件事情,同时调用了方法A
A方法中实现了一个Runnable,去实现另一件事
按上面的做法,奇怪么?如果要实现这样的要求
通常如何解决呢?

解决方案 »

  1.   

    首先帮你指出一个错误就是:Runnable是一个接口,不能说是方法实现了一个Runnable,你可以将一个方法定义在一个类中,让这个类来实现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--;//票数减一
    }
    }
    }
    }
    }
    好好看看吧
    希望能解答你的问题
      

  2.   

    kusch,您好,也许我的表述有误,使您误会了,我也以代码为例说明我想做的事情:public class MyClass extends Thread {
    ...
    private Executor pool = Executors.newFixedThreadPool(1);
    ... public void run() {
    //这里面做了第一件事情
    } public void methodA() {
    pool.execute(new Runnable() {
    public void run() {
    //这里面做了第二个事情
    }
    });
    }
    }我的问题是,对于MyClass这个类来说,如此设计是否合理,
    如果想实现类似这样的操作,通常应当如何设计?