继承Thread类
class tasks extends Thread{
String[] tasks = {"1","2","3","4","5","6","7"};
tasks (String name){
super(name);
}
public void run(){
for(int i = 5;i>0;i--){
try {
sleep(500);
System.out.println(Thread.currentThread().getName()+"完成了这个任务: "+tasks[i--]);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
}
class test{
public static void main(String[] args) {
Thread t1 = new Thread();
Thread t2 = new Thread();
Thread t3 = new Thread();
Thread t4 = new Thread();
t1.start();
t2.start();
t3.start();
t4.start();
}
Thread用于描述线程,该类决定了一个功能用于存储线程索要运行的代码,该存储功能就是run方法。
每创建一个Thread类的对象,就是创建了一个线程,主线程的方法放在main里面,另一个线程就放在继承了Thread类的run()里面。
start与run的区别是在主函数里面调用start可以开启线程并调用run,但是直接调用run就没线程什么事了。
thread创建的t1、t2、t3、t4会相互争夺执行权力,直到运行结束。
如果需要冷冻线程就可以
a、sleep(millisecond); 过一点时间线程会自动解冻
b、wait(); 需要之后调用notify();进行解冻。
线程消亡就是用stop();
通过Runnable接口实现
class task implements Runnable{
String[] tasks = {"策划书","洽商","汇报工作","传达指令","编写程序","订购午餐","讲笑话","绘制总结表"};
private String name;
public void run(){
int i = 7;
while(true){
if(i>0){
System.out.println(this.name+"完成了这个任务"+tasks[i--]);
}
}
}
}
public class 一之多线程初涉{
public static void main(String[] args) {
task t = new task();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
实现和继承的区别
实现Runnable借口可以解决单继承的局限性
所以一般情况下虽然继承Thread类可以逻辑上接受起来更清晰,
但是使用实现方式更可以解决但单继承缺陷。
多线程的问题还很复杂,明天继续涉猎。