在java中兩個執行緒同時執行是怎麼變化的
阿新 • • 發佈:2019-01-25
線上程執行中,兩個執行緒同時執行的情況是很平常的,下面我用一個案例來說明一下兩個執行緒同時執行時,執行緒狀態的變化情況:
程式碼如下:
/* * 功能:兩個執行緒同時執行是如何變化的 * 作者:zyj0813 * 案例:編寫一個程式,該程式可以接受一個整數n,建立兩個執行緒, * 一個執行緒計算從1+....+n並輸出結果, * 另一個執行緒每隔一秒在控制檯輸出“我是一個執行緒,正在輸出第i個hello world”。 */ package com.test2; public class Demo2_5 { public static void main(String[] args) { Bird bird=new Bird(10); Pig pig=new Pig(10); //啟動執行緒 Thread t1=new Thread(bird); Thread t2=new Thread(pig); t1.start(); t2.start(); } } //建立一個豬類來列印 class Pig implements Runnable { int times=0; int n=0; public Pig(int n) { this.n=n; } public void run() { while(true) { try { //時間延遲一秒 Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } times++; System.out.println("我是一個執行緒,正在輸出第"+times+"個 hello world!!!"); if(times==n) { break; } } } } //建立一個鳥類,來數數 class Bird implements Runnable { int times=0; int res=0; int n=0; public Bird(int n) { this.n=n; } public void run() { while(true) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } res+=(++times); System.out.println("第"+times+"次計算結果:"+res); if(times==n) { System.out.println("最終結果:"+res); break; } } } }
執行結果:(可以看出兩個程序同時執行,輸出的結果並不是按照某個固定的順序進行的,是隨機產生的,無規律可言)