java多线程总结: 线程的两种创建方式及优劣比较
1、通过实现Runnable接口线程创建
(1).定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2).创建Runnable接口实现类的对象。
(3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)
(4).调用Thread对象的start()方法,启动线程
.package demo.thread;public class TreadDemo1 implements Runnable {private int countDown = 10; @Override// 在run方法中定义任务 public void run() { while (countDown-- > 0) {System.out.println("#" + Thread.currentThread().getName() + "(" + countDown + ")"); }} public static void main(String[] args) { // Runnable中run方法是一个空方法,并不会产生任何线程行为,必须显式地将一个任务附着到线程上 TreadDemo1 tt=new TreadDemo1(); new Thread(tt).start(); new Thread(tt).start();System.out.println("火箭发射前倒计时:"); }}#Thread-1(8)#Thread-1(7)#Thread-1(6)#Thread-1(5)#Thread-1(4)#Thread-1(3)#Thread-1(2)#Thread-1(1)#Thread-1(0)#Thread-0(9)
package demo.thread;public class ThreadDemo2 extends Thread { private int countDown = 10; @Override// 在run方法中定义任务 public void run() { while (countDown-- > 0) { System.out.println("#" + this.getName() + "(" + countDown + ")"); } } public static void main(String[] args) {new ThreadDemo2().start(); new ThreadDemo2().start(); // 由于start方法迅速返回,所以main线程可以执行其他的操作,此时有两个独立的线程在并发运行 System.out.println("火箭发射前倒计时:"); }}package demo.thread;public class ThreadDemo2 extends Thread {private int countDown = 10;@Override// 在run方法中定义任务public void run() {while (countDown-- > 0) {System.out.println("#" + this.getName() + "(" + countDown + ")");}}public static void main(String[] args) {new ThreadDemo2().start();new ThreadDemo2().start();// 由于start方法迅速返回,所以main线程可以执行其他的操作,此时有两个独立的线程在并发运行System.out.println("火箭发射前倒计时:");}}#Thread-0(9)#Thread-0(8)#Thread-0(7)#Thread-0(6)#Thread-0(5)#Thread-0(4)#Thread-0(3)#Thread-0(2)#Thread-0(1)#Thread-0(0)火箭发射前倒计时:#Thread-1(9)#Thread-1(8)#Thread-1(7)#Thread-1(6)#Thread-1(5)#Thread-1(4)#Thread-1(3)#Thread-1(2)#Thread-1(1)#Thread-1(0)