我一直在努力了解多线程是如何工作的,所以我运行了下面的代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package mainBowl;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Kbluue
*/
public class ThreadStudy {
Thread t, t1, t2;
Runnable r, r1, r2;
public ThreadStudy() {
init();
}
public void start(){
}
private void init(){
t = new Thread(r);
t.setName("Thread");
t1 = new Thread(r1);
t1.setName("Thread 1");
t2 = new Thread(r2);
t2.setName("Thread 2");
r = new Runnable() {
@Override
public void run() {
// throw new UnsupportedOperationException("Not supported yet.");
if (t != null){
printStart(t);
try {
Thread.currentThread().wait();
} catch (Exception e){
printError(t);
}
printResume(t);
t1.notify();
}
}
};
r1 = new Runnable() {
@Override
public void run() {
// throw new UnsupportedOperationException("Not supported yet.");
if (t != null){
printStart(t1);
try {
t1.wait();
} catch (InterruptedException ex) {
Logger.getLogger(ThreadStudy.class.getName()).log(Level.SEVERE, null, ex);
}
printResume(t1);
t2.notify();
}
}
};
r2 = new Runnable() {
@Override
public void run() {
// throw new UnsupportedOperationException("Not supported yet.");
if (t != null){
printStart(t2);
t.notify();
printResume(t2);
}
}
};
}
private void printStart(Thread t){
System.out.println("This is a new thread starting" + t.getName());
}
private void printResume(Thread t){
System.out.println("This is a thread resuming" + t.getName());
}
private void printError(Thread t){
System.out.println("There is an error" + t.getName());
}
public void run(){
t.start();
t1.start();
t2.start();
}
}
然后我在主要活动
中运行了这个new ThreadStudy().run;
但输出没有任何结果。刚刚;
run:
BUILD SUCCESSFUL (total time: 0 seconds)
甚至不能使用错误消息。
此外,我想知道是否有更多方法可以将命令/方法添加到除新线程(Runnable r)方法之外的线程中。 感谢您的期待。
答案 0 :(得分:3)
在初始化之前,您将Runnable变量传递给Thread构造函数。当线程启动时,它将委托给它自己的run
方法,该方法什么都不做。
请记住,java是按值传递的。
答案 1 :(得分:1)
创建Thread实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:
提供Runnable对象。 Runnable接口定义了一个run方法,用于包含线程中执行的代码。 Runnable对象被传递给Thread构造函数。
子类线程。 Thread类本身实现了Runnable,尽管它的run方法什么都不做。应用程序可以子类化Thread,提供自己的run实现。
您只需覆盖Runnable
类
run()
方法,即可在不使用Thread
界面的情况下执行此操作
示例代码:
t = new Thread(){
@Override
public void run() {
// add your logic here
// or call any method from here
}
};