找不到Thread.start

问题描述 投票:-2回答:2

我有一个我创建的主题

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

而thisStockThread定义为:

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();
 }
}

但是stockthread的start()方法显示为“无法解析符号”。

我不明白应该责备什么。这应该是一个可访问的方法,因为我实现了runnable no?

java multithreading
2个回答
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();

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

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


0
投票

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

Runnable没有start方法。

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

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

如果要进行多线程,则调用run方法将不起作用(因为它将在当前线程中运行runnable)。

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

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

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.