线程的创建有两种方式,一种是类的继承extends Thread,一种是接口的实现implements Runnable
图示:
第一种:
1 package com.mon11.day27; 2 /** 3 * 类说明 : 4 * @author 作者 :chenyanlong 5 * @version 创建时间:2017年11月27日 6 */ 7 public class Mythread extends Thread{ 8 9 public void run(){ 10 for(int i=0;i<100;i++){ 11 System.out.println(getName()+"-------------->"+i); 12 } 13 } 14 }
第二种:
1 package com.mon11.day27; 2 /** 3 * 类说明 : 4 * @author 作者 :chenyanlong 5 * @version 创建时间:2017年11月27日 6 */ 7 public class Mythread1 implements Runnable{ 8 9 @Override 10 public void run() { 11 for(int i=0;i<100;i++){ 12 System.out.println(Thread.currentThread().getName()+"----------->"+i); 13 } 14 15 } 16 17 }
实现方法:
1 package com.mon11.day27; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 /** 8 * 类说明 : 9 * @author 作者 :chenyanlong 10 * @version 创建时间:2017年11月27日 11 */ 12 public class TestMythread { 13 14 @Test 15 public void test() { 16 Mythread mythread=new Mythread(); 17 mythread.start(); 18 19 for(int i=0;i<100;i++){ 20 System.out.println(Thread.currentThread().getName()+"----->"+i); 21 } 22 } 23 24 @Test 25 public void test1() { 26 Mythread1 mythread1=new Mythread1(); 27 Thread thread1=new Thread(mythread1); 28 thread1.start(); 29 30 for(int i=0;i<10;i++){ 31 System.out.println(Thread.currentThread().getName()+"----->"+i); 32 } 33 } 34 35 @Test 36 public void test2() { 37 Mythread mythread=new Mythread(); 38 mythread.start(); 39 Mythread mythread1=new Mythread(); 40 mythread1.start(); 41 Mythread mythread2=new Mythread(); 42 mythread2.start(); 43 44 for(int i=0;i<10;i++){ 45 System.out.println(Thread.currentThread().getName()+"----->"+i); 46 } 47 } 48 }
关于优先级的实现方法,以及join的用法,守护线程:
1 package com.mon11.day27; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 /** 8 * 类说明 : 9 * @author 作者 :chenyanlong 10 * @version 创建时间:2017年11月27日 11 */ 12 public class Test2 { 13 14 //关于优先级,优先级越高,争取cpu的权利就越大 15 @Test 16 public void test3() { 17 18 for(int i=0;i<10;i++){ 19 try { 20 Thread.sleep(1000); 21 } catch (InterruptedException e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 } 25 System.out.println(Thread.currentThread().getName()+"----->"+i); 26 } 27 } 28 29 //关于关于join() 30 @Test 31 public void test4() { 32 33 Mythread mythread=new Mythread(); 34 try { 35 mythread.join(); 36 } catch (InterruptedException e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } 40 mythread.start(); 41 Mythread mythread1=new Mythread(); 42 mythread1.start(); 43 } 44 45 //关于关于守护线程 46 @Test 47 public void test5() { 48 49 Mythread mythread=new Mythread(); 50 mythread.setDaemon(true); 51 mythread.start(); 52 Mythread mythread1=new Mythread(); 53 mythread1.start(); 54 } 55 }
这个是优先级的验证:
1 package com.mon11.day27; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 /** 8 * 类说明 : 9 * @author 作者 :chenyanlong 10 * @version 创建时间:2017年11月27日 11 */ 12 public class Test3 { 13 14 //关于优先级,优先级越高,争取cpu的权利就越大 15 @Test 16 public void test() { 17 Mythread mythread=new Mythread(); 18 mythread.setPriority(Thread.MIN_PRIORITY); 19 mythread.start(); 20 Mythread mythread1=new Mythread(); 21 mythread1.setPriority(Thread.MAX_PRIORITY); 22 mythread1.start(); 23 Mythread mythread2=new Mythread(); 24 mythread2.setPriority(Thread.NORM_PRIORITY); 25 mythread2.start(); 26 27 System.out.println("优先级的输出"+mythread.getPriority()+" "+mythread1.getPriority()+" "+mythread2.getPriority()); 28 /*for(int i=0;i<10;i++){ 29 System.out.println(Thread.currentThread().getName()+"----->"+i); 30 }*/ 31 } 32 33 }