一、两种方法实现多线程:
很多时候程序员无法选择何时在代码中出现线程,但是在基本的Web库类、Servlet中,多线程都是很重要的实现并发的方式。
1.继承Thread类
class 类名 extends Thread{
run(){//覆盖run方法
线程处理的程序
}
}
/**
* 用继承Thread类的方法创建线程
*/
public class ThreadY extends Thread {
//标记线程是否运行
private boolean statues = false;
//开启线程,覆盖父类的start方法
public void start(){
//把状态置为true表示需要运行
this.statues = true;
//调用父类的指针执行start?
super.start();
}
//需要线程处理的程序,覆盖父类Thread的run方法
public void run(){
int i=0;
try{
while(statues){
this.setName("Thread " + i++);
System.out.println("线程"+this.getName()+"正在运行");
//将当前线程休眠200秒
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName() + "运行结束");
}
//设置线程是否运行的状态
public void setStatues(boolean statues){
this.statues = statues;
}
//启动线程
public void startThreadY(){
System.out.println("开启线程");
this.start();
}
//停止线程
public void stopThreadY(){
System.out.println("关闭线程");
this.setStatues(false);
}
}
2.实现Runnable接口
class 类名 implements Runnable{
run(){//覆盖run方法
线程处理的程序
}
}
/**
* 用实现Runnable接口的方法创建线程
*/
public class ThreadX implements Runnable{
private Date runDate;
//覆盖Thread中的run方法
@Override
public void run() {
System.out.println("线程X启动");
this.runDate=new Date();
System.out.println("启动时间:"+runDate.toString());
}
}
同时启动多个线程:
public class StartThread {
public void startThreadY(){
//创建实例
ThreadY threadY = new ThreadY();
//启动线程Y
threadY.startThreadY();
try{
threadY.sleep(500);
}catch (InterruptedException e){
e.printStackTrace();
}
threadY.stopThreadY();
}
public void startThreadX(){
//接口new 实现类,可以用同一个接口实现不同的功能,多态的体现,依赖抽象,而不是依赖具体
Runnable runnX = new ThreadX();
Thread thread = new Thread(runnX);
//ThreadX thread = new ThreadX();
//start方法启动线程
thread.start();
}
public static void main(String[] args){
StartThread s = new StartThread();
s.startThreadX();
s.startThreadY();
}
}
参考:《Java程序设计经典300例》《Java编程思想》