【问题标题】:Program not executing thread程序不执行线程
【发布时间】:2013-11-09 22:34:09
【问题描述】:

所以我有两个文件,第一个是 swing 类,第二个是我的线程类。当我运行我的线程由于某种原因它没有运行时,我尝试通过放置一些打印语句来查看我的程序是否会到达那里,但它们都没有运行。

我的线程类

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

class CheckFiles implements Runnable {

    public void run() {

        while (!UserInterface.stop) {
            try {

                String line;

                BufferedReader b = new BufferedReader(new FileReader(UserInterface.location));

                while((line = b.readLine()) != null) {

                    System.out.println(line);

                }

            } catch (IOException e) { System.out.println(e); }
        }
    }
}

在我的 UserInterface 类中,我通过执行以下操作来启动该方法

System.out.println(stop); //prints true
loadFile.setEnabled(false); //not important
status.setText("Checking Files"); //not important
stop = false; 
System.out.println(stop); //prints false
new CheckFiles(); //start thread

有什么东西阻止了我的线程运行还是我做错了?

【问题讨论】:

  • 一个小提示:确保UserInterface.stop 是易失性的,因为你在两个不同的线程中使用了一个变量而没有同步。

标签: java multithreading


【解决方案1】:

您正在创建一个可用于启动线程的类,但您并没有启动它。

有几种可能的解决方案:

解决方案 1:

更改类型以扩展Thread

class CheckFiles extends Thread {
    ...
}

并将最后一行更改为

(new CheckFiles()).start();

解决方案 2:

保留CheckFiles a Runnable,并将最后一行更改为

(new Thread(new CheckFiles())).start();

【讨论】:

  • 使其可运行和扩展线程有什么区别?
  • @user2612619 Runnable 是一个接口,如果你的线程类必须扩展一些其他类,你可以使用它。如果不需要扩展另一个类,您可以扩展 Thread 以简化其余代码。
【解决方案2】:

你不应该让类扩展线程,而应该做类似的事情

Thread t = new Thread(new CheckFiles());
t.start();

【讨论】:

    【解决方案3】:

    目前你只让你的类 Runnable。您需要创建并启动您的线程。请看http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html

    Thread t = new Thread(new CheckFiles());
    t.start();
    

    扩展 Thread 和实现目标 Runnable 之间的主要区别在于,在扩展 Thread 时,您将 Thread 与您正在创建的对象相关联。通过使您的对象可运行,您可以将您的线程与许多可运行对象相关联..

    【讨论】:

      【解决方案4】:

      您刚刚创建了一个应该是Thread 的类的实例!您必须实际声明 Thread 并启动它。例如new Thread(new CheckFiles()).start(); 创建线程实例,对象并启动它。

      【讨论】:

        猜你喜欢
        • 2017-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多