[Java] 16.1. 執行緒

執行緒,打破程式執行的順序。

 

image/svg+xml16.1. 執⾏緒 – Thread class Employee { String name; public Employee( String name){ this .name = name; } void doWork (){ System.out.println(name + 開始⼯作。 " ); } } class Main{ public static void main( String [] args){ Employee e1 = new Employee ( " Jack " ); Employee e2 = new Employee ( " Eric " ); Employee e3 = new Employee ( " Mary " ); e1 . doWork (); e2 . doWork (); e3 . doWork (); } } 執⾏結果 Jack 開始⼯作 Eric 開始⼯作 Mary 開始⼯作 class Employee extends Thread { String name; public Employee( String name){ this .name = name; } } class Employee extends Thread { String name; public Employee( String name){ this .name = name; } public void run (){ System.out.println(name+ " 正在畫第 '1' 張圖。 " ); System.out.println(name+ " 正在畫第 '2' 張圖。 " ); System.out.println(name+ " 正在畫第 '3' 張圖。 " ); System.out.println(name+ " 正在畫第 '4' 張圖。 " ); System.out.println(name+ " 正在畫第 '5' 張圖。 " ); System.out.println(name+ " 正在畫第 '6' 張圖。 " ); System.out.println(name+ " 正在畫第 '7' 張圖。 " ); System.out.println(name+ " 正在畫第 '8' 張圖。 " ); System.out.println(name+ " 正在畫第 '9' 張圖。 " ); } } class Main{ public static void main( String [] args){ Employee e1 = new Employee ( " Jack " ); Employee e2 = new Employee ( " Eric " ); Employee e3 = new Employee ( " Mary " ); e1 . start (); e2 . start (); e3 . start (); } } 執⾏結果之⼀: Jack 正在畫第 '1' 張圖。 Jack 正在畫第 '2' 張圖。 Jack 正在畫第 '3' 張圖。 Jack 正在畫第 '4' 張圖。 Jack 正在畫第 '5' 張圖。 Jack 正在畫第 '6' 張圖。 Jack 正在畫第 '7' 張圖。 Jack 正在畫第 '8' 張圖。 Mary 正在畫第 '1' 張圖。 Mary 正在畫第 '2' 張圖。 Mary 正在畫第 '3' 張圖。 Mary 正在畫第 '4' 張圖。 Mary 正在畫第 '5' 張圖。 Mary 正在畫第 '6' 張圖。 Mary 正在畫第 '7' 張圖。 Mary 正在畫第 '8' 張圖。 Eric 正在畫第 '1' 張圖。 Eric 正在畫第 '2' 張圖。 Eric 正在畫第 '3' 張圖。 Eric 正在畫第 '4' 張圖。 Eric 正在畫第 '5' 張圖。 Eric 正在畫第 '6' 張圖。 Eric 正在畫第 '7' 張圖。 Mary 正在畫第 '9' 張圖。 Eric 正在畫第 '8' 張圖。 Eric 正在畫第 '9' 張圖。 Jack 正在畫第 '9' 張圖。 class Main{ public static void main( String [] args){ Employee e1 = new Employee ( " Jack " ); Employee e2 = new Employee ( " Eric " ); Employee e3 = new Employee ( " Mary " ); e1 . start (); e2 . start (); e3 . start (); e1 . run (); e2 . run (); e3 . run (); } } 執⾏結果: Jack 正在畫第 '1' 張圖。 Jack 正在畫第 '2' 張圖。 Jack 正在畫第 '3' 張圖。 Jack 正在畫第 '4' 張圖。 Jack 正在畫第 '5' 張圖。 Jack 正在畫第 '6' 張圖。 Jack 正在畫第 '7' 張圖。 Jack 正在畫第 '8' 張圖。 Jack 正在畫第 '9' 張圖。 Eric 正在畫第 '1' 張圖。 Eric 正在畫第 '2' 張圖。 Eric 正在畫第 '3' 張圖。 Eric 正在畫第 '4' 張圖。 Eric 正在畫第 '5' 張圖。 Eric 正在畫第 '6' 張圖。 Eric 正在畫第 '7' 張圖。 Eric 正在畫第 '8' 張圖。 Eric 正在畫第 '9' 張圖。 Mary 正在畫第 '1' 張圖。 Mary 正在畫第 '2' 張圖。 Mary 正在畫第 '3' 張圖。 Mary 正在畫第 '4' 張圖。 Mary 正在畫第 '5' 張圖。 Mary 正在畫第 '6' 張圖。 Mary 正在畫第 '7' 張圖。 Mary 正在畫第 '8' 張圖。 Mary 正在畫第 '9' 張圖。 class Person { } class Employee extends Person implements Runnable { String name; public Employee( String name){ this .name = name;} public void run (){ for ( int i= 1 ; i<= 10 ; i++) System.out.println(name+ " 正在畫第 '" +i+ "' 張圖。 " ); } } class Main{ public static void main( String [] args){ Employee e = new Employee ( " Jack " ); Thread t = new Thread ( e ); t.start (); } } class Main{ public static void main( String [] args){ Runnable r1 = new Runnable () { public void run (){ for ( int i= 0 ; i< 10 ; i++) System.out.println( "Runnable:" +i); } } ; Thread t1 = new Thread ( r1 ); t1 . start (); Thread t2 = new Thread () { public void run (){ for ( int i= 0 ; i< 10 ; i++){ System.out.println( "Thread:" +i); } } } ; t2 . start (); } } class Main{ public static void main( String [] args){ Employee e1 = new Employee ( Jack " ); e1 . start (); } } 執⾏結果: Jack 正在畫第 '1' 張圖。 Jack 正在畫第 '2' 張圖。 Jack 正在畫第 '3' 張圖。 Jack 正在畫第 '4' 張圖。 Jack 正在畫第 '5' 張圖。 Jack 正在畫第 '6' 張圖。 Jack 正在畫第 '7' 張圖。 Jack 正在畫第 '8' 張圖。 Jack 正在畫第 '9' 張圖。 class Employee extends Thread { String name; public Employee( String name){ this .name = name;} public void run (){ System.out.println(name+ " 正在畫第 '1' 張圖。 " ); System.out.println(name+ " 正在畫第 '2' 張圖。 " ); System.out.println(name+ " 正在畫第 '3' 張圖。 " ); System.out.println(name+ " 正在畫第 '4' 張圖。 " ); try { Thread.sleep ( 1000 ); } catch ( InterruptedException e){} System.out.println(name+ " 正在畫第 '5' 張圖。 " ); System.out.println(name+ " 正在畫第 '6' 張圖。 " ); System.out.println(name+ " 正在畫第 '7' 張圖。 " ); System.out.println(name+ " 正在畫第 '8' 張圖。 " ); try { Thread.sleep ( 1000 ); } catch ( InterruptedException e){} System.out.println(name+ " 正在畫第 '9' 張圖。 " ); } } class Main{ public static void main( String [] args){ Employee e1 = new Employee ( Jack " ); e1 . start (); } } 執⾏結果: Jack 正在畫第 '1' 張圖。 Jack 正在畫第 '2' 張圖。 Jack 正在畫第 '3' 張圖。 Jack 正在畫第 '4' 張圖。 Jack 正在畫第 '5' 張圖。 Jack 正在畫第 '6' 張圖。 Jack 正在畫第 '7' 張圖。 Jack 正在畫第 '8' 張圖。 Jack 正在畫第 '9' 張圖。 class Employee extends Thread { String name; public Employee( String name){ this .name = name;} public void run (){ for ( int i= 1 ; i<= 10 ; i++) System.out.println(name+ " 正在畫第 '" +i+ "' 張圖。 " ); } } class Main{ public static void main( String [] args){ Employee e1= new Employee ( " Jack " ); e1 . start (); try { e1 . sleep ( 1000 ); } catch ( InterruptedException e){} System.out.println( " main() ⽅法中的程式。 " ); } } 執⾏結果: Jack 正在畫第 '1' 張圖。 Jack 正在畫第 '2' 張圖。 Jack 正在畫第 '3' 張圖。 Jack 正在畫第 '4' 張圖。 Jack 正在畫第 '5' 張圖。 Jack 正在畫第 '6' 張圖。 Jack 正在畫第 '7' 張圖。 Jack 正在畫第 '8' 張圖。 Jack 正在畫第 '9' 張圖。 main() ⽅法中的程式。 建立⼀個系統就像建房⼦⼀樣是分⼯合作的,就像運⽤執⾏緒的功能是⼀樣的,每位員⼯都是分別進 ⾏⼯作的 class Employee extends Thread { String name; String task ; public Employee( String name, String task ){ this .name = name; this .task = task ; } public void run (){ for ( int i= 1 ; i<= 5 ; i++){ try { Thread.sleep ( 100 ); } catch ( InterruptedException e){} System.out.println(name + " 進⾏⼯作 -" + task + " ,完成進⾏ " + i* 20 + "%" ); } } } class Main{ public static void main( String [] args){ Employee e1 = new Employee ( "Jack" , " 畫圖 " ); Employee e2 = new Employee ( "Eric" , " 程式 " ); Employee e3 = new Employee ( "Mary" , " 設計 畫⾯ " ); e1 . start (); e2 . start (); e3 . start (); try { e1 . join (); e2 . join (); e3 . join (); } catch ( InterruptedException e){} System.out.println( " 系統已開發完成 ! " ); } } } 執⾏結果之⼀: Jack 進⾏⼯作 - 畫圖,完成進⾏ 20% Eric 進⾏⼯作 - 寫程式,完成進⾏ 20% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 20% Jack 進⾏⼯作 - 畫圖,完成進⾏ 40% Eric 進⾏⼯作 - 寫程式,完成進⾏ 40% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 40% Jack 進⾏⼯作 - 畫圖,完成進⾏ 60% Eric 進⾏⼯作 - 寫程式,完成進⾏ 60% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 60% Jack 進⾏⼯作 - 畫圖,完成進⾏ 80% Eric 進⾏⼯作 - 寫程式,完成進⾏ 80% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 80% Jack 進⾏⼯作 - 畫圖,完成進⾏ 100% Eric 進⾏⼯作 - 寫程式,完成進⾏ 100% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 100% 系統已開發完成 ! class Employee extends Thread { String name; String task; public Employee( String name, String task){ this .name = name; this .task=task; } public void run (){ for ( int i= 1 ; i<= 5 ; i++){ Thread . yield (); System.out.println(name + " 進⾏⼯作 -" + task + " ,完成進⾏ " + i* 20 + "%" ); } } } class Main{ public static void main( String [] args){ Employee e1= new Employee( "Jack" , " 畫圖 " ); Employee e2= new Employee( "Eric" , " 寫程式 " ); Employee e3= new Employee( "Mary" , " 設計畫⾯ " ); e1.start(); e2.start(); e3.start(); } } 執⾏結果: Jack 進⾏⼯作 - 畫圖,完成進⾏ 20% Eric 進⾏⼯作 - 寫程式,完成進⾏ 20% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 20% Jack 進⾏⼯作 - 畫圖,完成進⾏ 40% Eric 進⾏⼯作 - 寫程式,完成進⾏ 40% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 40% Jack 進⾏⼯作 - 畫圖,完成進⾏ 60% Eric 進⾏⼯作 - 寫程式,完成進⾏ 60% Mary 進⾏⼯作 - 設計畫⾯,完成進⾏ 60% Jack 進⾏⼯作 - 畫圖,完成進⾏ 80%