1 Thread对象
2 Runnable接口
下面会执行哪部分代码呢!
输出结果如下:
以下代码来自于:JAVA编程思想第四版,说明加了是否加线程的区别!
Counter1 .java没有加线程的表现!
Counter2i.java加了线程结果大不一样了,加了个内部类,它继承了Thread
Counter3.java它实现了Runnable接口
Thread t = new Thread(
new Thread(){
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("1: "+Thread.currentThread().getName());
System.out.println("2: "+this.getName());
}
}
}
);
t.start();
2 Runnable接口
Thread t2 = new Thread(
new Runnable(){
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("3: "+Thread.currentThread().getName());
}
}
}
);
t2.start();
下面会执行哪部分代码呢!
//只要重写了run方法,你从构造函数传递进去的线程对象就不会在执行
new Thread(new Runnable(){
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("runnable: "+Thread.currentThread().getName());
}
}
}
){
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread: "+Thread.currentThread().getName());
}
}
}.start();
输出结果如下:
3: Thread-2
1: Thread-1
2: Thread-0
thread: Thread-3
以下代码来自于:JAVA编程思想第四版,说明加了是否加线程的区别!
Counter1 .java没有加线程的表现!
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Counter1 extends Applet {
private static final long serialVersionUID = 1L;
private int count = 0;
private Button onOff = new Button("Toggle"), start = new Button("Start");
private TextField t = new TextField(10);
private boolean runFlag = true;
public void init() {
add(t);
start.addActionListener(new StartL());
add(start);
onOff.addActionListener(new OnOffL());
add(onOff);
}
@SuppressWarnings("static-access")
public void go() {
while (true) {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
}
if (runFlag)
t.setText(Integer.toString(count++));
}
}
class StartL implements ActionListener {
public void actionPerformed(ActionEvent e) {
go();
}
}
class OnOffL implements ActionListener {
public void actionPerformed(ActionEvent e) {
runFlag = !runFlag;
}
}
public static void main(String[] args) {
Counter1 applet = new Counter1();
Frame aFrame = new Frame("Counter1");
aFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(300, 200);
applet.init();
applet.start();
aFrame.setVisible(true);
}
}
Counter2i.java加了线程结果大不一样了,加了个内部类,它继承了Thread
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Counter2i extends Applet {
private static final long serialVersionUID = 1L;
private class SeparateSubTask extends Thread {
int count = 0;
boolean runFlag = true;
SeparateSubTask() {
start();
}
public void run() {
while (true) {
try {
sleep(100);
} catch (InterruptedException e) {
}
if (runFlag)
t.setText(Integer.toString(count++));
}
}
}
private SeparateSubTask sp = null;
private TextField t = new TextField(10);
private Button onOff = new Button("Toggle"), start = new Button("Start");
public void init() {
add(t);
start.addActionListener(new StartL());
add(start);
onOff.addActionListener(new OnOffL());
add(onOff);
}
class StartL implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (sp == null)
sp = new SeparateSubTask();
}
}
class OnOffL implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (sp != null)
sp.runFlag = !sp.runFlag; // invertFlag();
}
}
public static void main(String[] args) {
Counter2i applet = new Counter2i();
Frame aFrame = new Frame("Counter2i");
aFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(300, 200);
applet.init();
applet.start();
aFrame.setVisible(true);
}
}
Counter3.java它实现了Runnable接口
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Counter3 extends Applet implements Runnable {
private static final long serialVersionUID = 1L;
private int count = 0;
private boolean runFlag = true;
private Thread selfThread = null;
private Button onOff = new Button("Toggle"), start = new Button("Start");
private TextField t = new TextField(10);
public void init() {
add(t);
start.addActionListener(new StartL());
add(start);
onOff.addActionListener(new OnOffL());
add(onOff);
}
@SuppressWarnings("static-access")
public void run() {
while (true) {
try {
selfThread.sleep(100);
} catch (InterruptedException e) {
}
if (runFlag)
t.setText(Integer.toString(count++));
}
}
class StartL implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (selfThread == null) {
selfThread = new Thread(Counter3.this);
selfThread.start();
}
}
}
class OnOffL implements ActionListener {
public void actionPerformed(ActionEvent e) {
runFlag = !runFlag;
}
}
public static void main(String[] args) {
Counter3 applet = new Counter3();
Frame aFrame = new Frame("Counter3");
aFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(300, 200);
applet.init();
applet.start();
aFrame.setVisible(true);
}
}