转自:http://www.cnblogs.com/liujichang/p/3150387.html
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方法有两种,分别是synchronized,wait与notify
先看一下java线程运行时各个阶段的运行状态
java实现多线程有两种方法
1、继承Thread类
2、实现Runnable接口
这两种方法的共同点:
不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。
两种方法的不同点:
1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承
2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性
基于以上两点所以建议用第二种方法
1 package cn.itcast.demo1; 2 3 public class MyThread extends Thread { 4 private String name; 5 public MyThread(String name){ 6 this.name = name; 7 } 8 //如果要使用多线程,则必须有一个方法的主体 9 public void run(){ 10 //打印输出 11 for(int i = 0;i < 10; i++){ 12 System.out.println(this.name + "----->运行"); 13 } 14 } 15 16 }
1 package cn.itcast.demo1; 2 3 public class Demo5 { 4 public static void main(String[] args) { 5 Runnable r1 = new MyThread("线程一"); 6 Runnable r2 = new MyThread("线程二"); 7 Runnable r3 = new MyThread("线程三"); 8 9 Thread t1 = new Thread(r1); 10 Thread t2 = new Thread(r2); 11 Thread t3 = new Thread(r3); 12 13 t1.start(); 14 t2.start(); 15 t3.start(); 16 17 } 18 19 20 }
1 package cn.itcast.demo1; 2 3 public class Demo6 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 MyThread mt1 = new MyThread("线程A"); 8 MyThread mt2 = new MyThread("线程B"); 9 MyThread mt3 = new MyThread("线程C"); 10 11 mt1.start(); 12 mt2.start(); 13 mt3.start(); 14 15 } 16 17 }
这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程
第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程
程序2:
1 package cn.itcast.demo1; 2 3 public class MyThread1 implements Runnable { 4 private int ticket = 10; 5 6 @Override 7 public void run() { 8 // TODO Auto-generated method stub 9 for(int i = 0; i < 500;i++){ 10 if(this.ticket > 0){ 11 System.out.println("卖票------》" + (this.ticket--)); 12 } 13 } 14 15 } 16 17 }
1 package cn.itcast.demo1; 2 3 public class Demo7 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 MyThread1 mt = new MyThread1(); 8 Thread t1 = new Thread(mt); 9 Thread t2 = new Thread(mt); 10 Thread t3 = new Thread(mt); 11 12 t1.start(); 13 t2.start(); 14 t3.start(); 15 16 17 } 18 19 }
这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。