例子1
public class ThreadDemo2 extends Thread{
private int ticket=5;
@Override
public void run() {
for(int i=0;i<100;i++){
if(ticket>0){
System.out.println("买票了"+ticket--);
}
}
}
public static void main(String[] args) {
ThreadDemo2 threadDemo1=new ThreadDemo2();
ThreadDemo2 threadDemo2=new ThreadDemo2();
ThreadDemo2 threadDemo3=new ThreadDemo2();
threadDemo1.start();
threadDemo2.start();
threadDemo3.start();
public class ThreadDemo2 extends Thread{
private int ticket=5;
@Override
public void run() {
for(int i=0;i<100;i++){
if(ticket>0){
System.out.println("买票了"+ticket--);
}
}
}
public static void main(String[] args) {
ThreadDemo2 threadDemo1=new ThreadDemo2();
ThreadDemo2 threadDemo2=new ThreadDemo2();
ThreadDemo2 threadDemo3=new ThreadDemo2();
threadDemo1.start();
threadDemo2.start();
threadDemo3.start();
}
例子2
public class RunableDemo2 implements Runnable{
private int ticket=5;
@Override
public void run() {
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println("买票了"+ticket--);
}
}
}
public static void main(String[] args) {
RunableDemo2 rd=new RunableDemo2();
new Thread(rd).start();
new Thread(rd).start();
new Thread(rd).start();
}
}
运行结果:
例子1
买票了5
买票了5
买票了4
买票了3
买票了2
买票了1
买票了5
买票了4
买票了3
买票了2
买票了1
买票了4
买票了3
买票了2
买票了1
例子2
买票了5
买票了4
买票了3
买票了2
买票了1
结论:
Thread类和Runnable 都是实现多线程的手段,但是又有本质的区别
线程:是cpu分派和调度的基本单位,一个进程中有多个线程组成,多个线程共享同一个存储空间
Runnable优势:
1.适合多个相同的程序代码的线程去处理同一个资源
2 .可以避免java中的单继承的限制