多线程的实现 在实际的开发中java提供了三种实现方式。 1. 继承Thread的类。 2. 实现Runnable的借口 3. 使用Time和TimeTask的组合 l 继承Thread的类 如果一个类继承了Thread类,则该类就具有了多线程的能力了。具体方式是: public class TestThread { public static void main(String[] args) throws InterruptedException { ThreadAta = new ThreadA();//生成线程对象 Thread tb=new ThreadA(); ta.start();//启动线程 tb.start(); System.out.println("main结束了"); } } class ThreadAextends Thread{ public void run(){//实现run()方法 System.out.println(this.getName()+"开始执行"); for(int i=1;i<101;i++){ System.out.print(i+" "); } System.out.println(this.getName()+"结束run()方法"); } } 此线程简单的说明了多线程的应用。运行后可以看出两个线程是同时运行的。 并且没有先后的执行顺序。线程通过调用start()方法来启动线程。在ThreadA中重写了run()方法。 l 实现Runnable的接口 一个类实现了Runnable的接口也就具有了多线程的能力了。 下面是个简单的例子: public class TestRunnable implements Runnable{ public static void main(String[] args) { TestRunnable run= new TestRunnable(); Thread td = new Thread(run); Thread tt = new Thread(run); td.start(); tt.start(); } public void run(){ for(int i=0;i<101;i++){ System.out.print(i+" "); } String name = this.getClass().getName(); System.out.println(name); } } l Time和TimerTask组合 这是一种特殊的实现线程的方法。通过这种组合也能很好的实现线程。 下面是通过Timer和TimerTask的组合简单的实现古诗的输出。 import java.util.Timer; import java.util.TimerTask; public class TestTimer { public static void main(String[] args) { TimerA timerA = new TimerA(); Timer time = new Timer(); time.schedule(timerA, 1000); } } class TimerA extends TimerTask{ String text="君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发,朝如青丝暮成雪。人生得意须尽欢,莫使金樽空对月。" +"天生我材必有用,千金散尽还复来。烹羊宰牛且为乐,会须一饮三百杯。岑夫子,丹丘生,将进酒,君莫停。与君歌一曲,请君为我侧耳听。" +"钟鼓馔玉不足贵,但愿长醉不复醒。古来圣贤皆寂寞,惟有饮者留其名。陈王昔时宴平乐,斗酒十千恣欢谑。主人何为言少钱,径须沽取对君酌。" +"五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。"; public void run(){ String split[] = text.split(""); for(int i=0;i<split.length;i++){ String str = split[i]; System.out.print(str); if((i%50)==0&&i!=0){ System.out.println(); } try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } } import java.util.Timer; import java.util.TimerTask; public class TestTimer { public static void main(String[] args) { TimerA timerA = new TimerA(); Timer time = new Timer(); time.schedule(timerA, 1000); } } class TimerA extends TimerTask{ String text="君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发,朝如青丝暮成雪。人生得意须尽欢,莫使金樽空对月。" +"天生我材必有用,千金散尽还复来。烹羊宰牛且为乐,会须一饮三百杯。岑夫子,丹丘生,将进酒,君莫停。与君歌一曲,请君为我侧耳听。" +"钟鼓馔玉不足贵,但愿长醉不复醒。古来圣贤皆寂寞,惟有饮者留其名。陈王昔时宴平乐,斗酒十千恣欢谑。主人何为言少钱,径须沽取对君酌。" +"五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。"; public void run(){ String split[] = text.split(""); for(int i=0;i<split.length;i++){ String str = split[i]; System.out.print(str); if((i%50)==0&&i!=0){ System.out.println(); } try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } } 通过上面的例子,可以看到Time和TimerTask组合的使用。