TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
有三种方式实现Runnable接口(代码来自《java经典实例》)
1、直接扩展Thread类,这最适于不需要扩展其他类的独立程序,如下所示:
public class ThreadsDemo1 extends Thread {
String mesg;
int count;
public void run() {
while (count-- > 0) {
println(mesg);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
return;
}
}
println(mesg + " all done.");
}
void println(String s) {
System.out.println(s);
}
public ThreadsDemo1(String m, int n) {
count = n;
mesg = m;
setName(m + " runner Thread");
}
public static void main(String[] argv) {
new ThreadsDemo1("Hello from X", 2).start();
new ThreadsDemo1("Hello from Y", 3).start();
}
}
运行结果:
C:java>java ThreadsDemo1
Hello from X
Hello from Y
Hello from X
Hello from Y
Hello from X all done.
Hello from Y
Hello from Y all done.
2、直接实现Runnable接口。适于扩展了JApplet或其他类从而无法扩展Thread类,如下所示
public class ThreadsDemo2 implements Runnable {
String mesg;
Thread t;
int count;
public static void main(String[] argv) {
new ThreadsDemo2("Hello from X", 2);
new ThreadsDemo2("Hello from Y", 3);
}
public ThreadsDemo2(String m, int n) {
count = n;
mesg = m;
t = new Thread(this);
t.setName(m + " runner Thread");
t.start();
}
public void run() {
while (count-- > 0) {
println(mesg);
try {
Thread.sleep(100); // 100 msec
} catch (InterruptedException e) {
return;
}
}
println(mesg + " thread all done.");
}
void println(String s) {
System.out.println(s);
}
}
运行结果:
C:java>java ThreadsDemo2
Hello from X
Hello from Y
Hello from X
Hello from Y
Hello from X thread all done.
Hello from Y
Hello from Y thread all done.
3、构造一个Thread,传入实现了Runnable的内部类。最适于不与外界互操作的较小的run()方法,
如下所示
public class ThreadsDemo3 {
String mesg;
Thread t;
int count;
/**
* Main program, test driver for ThreadsDemo3 class.
*/
public static void main(String[] argv) {
new ThreadsDemo3("Hello from X", 10);
new ThreadsDemo3("Hello from Y", 15);
}
public ThreadsDemo3(String m, int n) {
count = n;
mesg = m;
t = new Thread(new Runnable() {
public void run() {
while (count-- > 0) {
println(mesg);
try {
Thread.sleep(100); // 100 msec
} catch (InterruptedException e) {
return;
}
}
println(mesg + " thread all done.");
}
});
t.setName(m + " runner Thread");
t.start();
}
void println(String s) {
System.out.println(s);
}
}
C:java>java ThreadsDemo3
Hello from X
Hello from Y
Hello from X
Hello from Y
Hello from X thread all done.
Hello from Y
Hello from Y thread all done. |
|