java多线程学习

  1. package com.multithread.learning;  
  2. /** 
  3.  * 多线程学习 
  4.  */  
  5. class Thread1 extends Thread{  
  6.     private String name;  
  7.     public Thread1(String name) {  
  8.        this.name=name;  
  9.     }  
  10.     public void run() {  
  11.         for (int i = 0; i < 5; i++) {  
  12.             System.out.println(name + "运行  :  " + i);  
  13.             try {  
  14.                 sleep((int) Math.random() * 10);  
  15.             } catch (InterruptedException e) {  
  16.                 e.printStackTrace();  
  17.             }  
  18.         }  
  19.          
  20.     }  
  21. }  
  22. public class Main {  
  23.   
  24.     public static void main(String[] args) {  
  25.         Thread1 mTh1=new Thread1("A");  
  26.         Thread1 mTh2=new Thread1("B");  
  27.         mTh1.start();  
  28.         mTh2.start();  
  29.   
  30.     }  
  31.   
  32. }
  33.       

    输出:

 

A运行  :  0
B运行  :  0
A运行  :  1
A运行  :  2
A运行  :  3
A运行  :  4
B运行  :  1
B运行  :  2
B运行  :  3
B运行  :  4

再运行一下:

A运行  :  0
B运行  :  0
B运行  :  1
B运行  :  2
B运行  :  3
B运行  :  4
A运行  :  1
A运行  :  2
A运行  :  3
A运行  :  4

说明:
程序启动运行main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建。随着调用MitiSay的两个对象的start方法,另外两个线程也启动了,这样,整个应用就在多线程下运行。
 
注意:start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。
从程序运行的结果可以发现,多线程程序是乱序执行。因此,只有乱序执行的代码才有必要设计为多线程。
Thread.sleep()方法调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留出一定时间给其他线程执行的机会。
实际上所有的多线程代码执行顺序都是不确定的,每次执行的结果都是随机的。





猜你喜欢

转载自blog.csdn.net/walker_m/article/details/80239406