找不到Thread.start

时间:2019-02-02 11:38:16

标签: java multithreading

我创建了一个线程

List<String> list_of_stocks = Arrays.asList("AAPL", "NFLX");
StockThread stockthread = new StockThread(list_of_stocks);
stockthread.start();

且此StockThread定义为:

public class StockThread implements Runnable {

List<String> list_of_stocks;

public StockThread(List<String> list_of_stocks){
    this.list_of_stocks = list_of_stocks;
}
@Override
public void run() {
        /*  So this thread simply has a */
        StockObserver so = new StockObserver(this.list_of_stocks, 1);

        so.getStockPrices();
 }
}

但是股票线程的start()方法显示为“无法解析符号”。

我不知道该怪什么。这应该是一种可访问的方法,因为我已经实现了runnable no?

2 个答案:

答案 0 :(得分:1)

使用线程类StockThread创建线程并启动它们的正确方法是使用以下方法之一-例如:

可以使用两种不同的方式来定义和启动线程:

  1. 实现Runnable界面
  2. 扩展Thread

1。实施Runnable:

Public class MyRunnable implements Runnable {

    @Override
    public void run() {
        // code to execude in the thread
    }
}

实例化并启动线程(其中两个):

MyRunnable runnable = new MyRunnable();
Thread myThread1 = new Thread(runnable);
myThread1.start();
Thread myThread2 = new Thread(runnable);
myThread2.start();

使用第一种方法的优点是可运行类仍然可以扩展。

2。扩展Thread类:

public class MyThread extends Thread {

    @Override
    public void run() {
        // code to execude in the thread
    }
}

实例化并启动线程:

MyThread myThread1 = new MyThread();
myThread1.start();
MyThread myThread2 = new MyThread();
myThread2.start();

请注意,任何线程只能启动一次。
链接到API java.lang.ThreadRunnable

答案 1 :(得分:0)

澄清一下:您的StockThread正在实现Runnable而不是扩展Thread。

Runnable没有启动方法。

您可以将StockThread重命名为StockRunnable并使用run。

这将编译,但可能不会产生预期的结果。

如果您希望发生多线程,则调用run方法将不起作用(因为它将在当前线程中运行可运行对象)。

您可以调用new Thread(runnable).start(),这将导致runnable.run()在另一个线程中发生。 (其中runnable应该是StockRunnable的实例)。

您可能希望保留创建的线程的实例,以便以后测试其状态(例如,等待线程完成运行)。

祝你好运!