多线程顾名思义就是有多个线程(Thread)同时并发运行,与进程(Process)不同,进程之间的资源互相独立而同一个进程的各个线程之间共享资源。
总之多线程思想是编程领域的一次飞跃,掌握好多线程可以在很多方面如鱼得水。
下面是一段用多线程模拟定制炸弹逻辑的java代码,注意代码是分两个文件MultiThreadTest.java和TimeBombThread.java的
//MultiThreadTest.java
import java.io.*;
/**
*
* @author Avery Liu
* 模拟定时炸弹
*/
public class MultiThreadTest {
public static void main(String[] args) {
// 创建和启动线程
TimeBombThread tbt = new TimeBombThread();
BufferedReader bf = new BufferedReader(
new InputStreamReader (System.in));
String line;
try {
while (true) {
System.out.println("请输入quit结束线程:");
//获得控制台输入
line = bf.readLine();
//判断停机条件
if (line.equals("quit")) {
tbt.stopThread();
break;
}
}
}catch(Exception e) {}
}
}
//TimeBombThread.java
/**
* 使用继承Thread类方式模拟定时炸弹逻辑
*/
public class TimeBombThread extends Thread {
int n;
boolean isRun;
public TimeBombThread() {
n = 60;
isRun = true;
this.start (); //启动线程
}
public void run() {
try {
while (isRun) {
Thread.sleep(1000);
System.out.println("剩余时间" + n);
if (n <= 0) {
isRun = false;
System.out.println("炸弹爆炸!");
break;
}
n--;
}
}catch(Exception e) {}
}
public void stopThread() {
isRun = false;
System.out.println("停止计时!");
}
}
在实际运行的过程中遇到了一点小问题,就是输入quit后程序不中止运行,原因是我把判断语句写成了if(line == "quit"),后来百度了一下才知道在java中,"=="号表示的是两个对象内容和地址都相同,line 和 "quit"是两个String对象,虽然它们的内容相同,但是它们有不同的地址空间所以用双等号判断得出的结果是false,改用line.equals()方法就能解决问题,因为equals方法只是判断内容相同。