1、传统线程创建回顾
1、直接使用Thread新建线程
package com.yzl; public class ThreadPart_1 { //直接使用Thread对象新建线程并重run方法 public void test1(){ Thread thread1 = new Thread(){ @Override public void run() { super.run(); for(int i=1; i<=10; i++){ System.out.println("Thread:" + Thread.currentThread().getName() + ",value is:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; thread1.start(); } public static void main(String[] args) { System.out.println("Main Thread:" + Thread.currentThread().getName() + " is run "); ThreadPart_1 test = new ThreadPart_1(); test.test1(); } }
运行结果:
Main Thread:main is run Thread:Thread-0,value is:1 Thread:Thread-0,value is:2 Thread:Thread-0,value is:3 Thread:Thread-0,value is:4 Thread:Thread-0,value is:5 Thread:Thread-0,value is:6 Thread:Thread-0,value is:7 Thread:Thread-0,value is:8 Thread:Thread-0,value is:9 Thread:Thread-0,value is:10
2、使用Runnable接口新建线程(从面向对象的角度这方法更好)
//使用Runnable接口新建线程 public void test2(){ Thread thread = new Thread(new Runnable() { @Override public void run() { for(int i=1; i<=10; i++){ System.out.println("Thread:" + Thread.currentThread().getName() + ",value is:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); } public static void main(String[] args) { System.out.println("Main Thread:" + Thread.currentThread().getName() + " is run "); ThreadPart_1 test = new ThreadPart_1(); test.test2(); }
运行结果:
Main Thread:main is run Thread:Thread-0,value is:1 Thread:Thread-0,value is:2 Thread:Thread-0,value is:3 Thread:Thread-0,value is:4 Thread:Thread-0,value is:5 Thread:Thread-0,value is:6 Thread:Thread-0,value is:7 Thread:Thread-0,value is:8 Thread:Thread-0,value is:9 Thread:Thread-0,value is:10
3、有趣一个测试
//有趣的测试 public void test3(){ Thread thread = new Thread( new Runnable() { @Override public void run() { System.out.println("Runnable run method is runing~~~"); } } ){ @Override public void run() { System.out.println("Thread run method is runing~~~"); } }; thread.start(); } public static void main(String[] args) { System.out.println("Main Thread:" + Thread.currentThread().getName() + " is run "); ThreadPart_1 test = new ThreadPart_1(); test.test3(); }
运行结果:
Main Thread:main is run
Thread run method is runing~~~
原因:
但是上面这run方法运行的前提是没有人去重写该方法,而我们上面的代码却重写了,导致上面这图片中的代码无法运行,故运行的是thread的run方法。