1.多线程是实现并发机制的一种有效手段,进程是程序动态执行的一个完整过程(发展,运行,消亡)。有两种实现方式:
通过继承Thread类:
package day3;
publicclass Ticketextends Thread
{
privateintticket=100;
publicvoid run()
{ while(true)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"###"+ticket--);
}
}
}
publicstaticvoid main(String[] args)
{
Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();
思想:四个线程工操作400张,每个线程操作100张,没有实现资源共享;
t1.start();
t2.start();
t3.start();
t4.start();
}
执行报错,开启一个线程,不能重复开启;
t1.start();
t1.start();
t1.start();
t1.start();
publicclass Ticketimplements Runnable{
privateintticket=10;
private Stringname;
public Ticket(String name){
this.name=name;
}
publicvoid run(){
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"###"+ticket--);
}
else{
break;
}
}
}
}
package com.ljf.temp;
publicclass TestTicket {
publicstaticvoid main(String[] args) {
// Ticket t=new Ticket("t1");
show2();
}
publicstatic voidshow(){
new Thread(new Ticket("t1")).start();
new Thread(new Ticket("t1")).start();
new Thread(new Ticket("t1")).start();
new Thread(new Ticket("t1")).start();
}
publicstaticvoid show2(){
Ticket t=new Ticket("t1");
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
可以看到同样是四个线程,总共卖出了10张,也就是说四个线程访问的是同一个资源(10张票),实现了资源共享。
继承Thead和实现runnable两种实现多线程的方式的区别:
-
使用runnable接口可以实现资源共享。
-
避免单继承的局限性。比如一个类实现了Thead类,此类就不能继承其他的类,具有局限性。