zoukankan      html  css  js  c++  java
  • Java笔记16:多线程共享数据

    一、Thread实现

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class ThreadDemo4 {  
    2.   
    3.    
    4.   
    5.     publicstaticvoid main(String[] args) {  
    6.   
    7.         new ThreadTest4().start();  
    8.   
    9.         new ThreadTest4().start();  
    10.   
    11.         new ThreadTest4().start();  
    12.   
    13.     }  
    14.   
    15. }  
    16.   
    17.    
    18.   
    19. class ThreadTest4 extends Thread {  
    20.   
    21.     privateinttickets = 100;  
    22.   
    23.     publicvoid run() {  
    24.   
    25.         booleanloop = true;  
    26.   
    27.         while(loop) {  
    28.   
    29.             if(tickets > 0) {  
    30.   
    31.                 System.out.println(Thread.currentThread().getName() + " is sailing ticket " + tickets--);  
    32.   
    33.             } else {  
    34.   
    35.                 loop = false;  
    36.   
    37.             }  
    38.   
    39.         }  
    40.   
    41.     }  
    42.   
    43. }  

     

    运行结果:

     

    分析:

    从运行结果可以看出,最终打印出了3份数据。说明每个线程独立地拥有一份数据,用Thread实现的多线程之间无法共享数据。

     

    二、Runnable实现

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class ThreadDemo5 {  
    2.   
    3.    
    4.   
    5.     publicstaticvoid main(String[] args) {  
    6.   
    7.         ThreadTest5 t = new ThreadTest5();  
    8.   
    9.         new Thread(t).start();  
    10.   
    11.         new Thread(t).start();  
    12.   
    13.         new Thread(t).start();  
    14.   
    15.     }  
    16.   
    17. }  
    18.   
    19.    
    20.   
    21. class ThreadTest5 implements Runnable {  
    22.   
    23.     privateinttickets = 100;  
    24.   
    25.     publicvoid run() {  
    26.   
    27.         booleanloop = true;  
    28.   
    29.         while(loop) {  
    30.   
    31.             if(tickets > 0) {  
    32.   
    33.                 System.out.println(Thread.currentThread().getName() + " is sailing ticket " + tickets--);  
    34.   
    35.             } else {  
    36.   
    37.                 loop = false;  
    38.   
    39.             }  
    40.   
    41.         }  
    42.   
    43.     }  
    44.   
    45. }  

     

    运行结果:

     

    分析:

    从运行结果可以看出,最终打印出来的只有一份数据。说明用Runnable实现的多个线程之间共享一份数据。

     

    结论:

    两种方法实现多线程的最重要区别是:Runnable实现的多线程共享数据,Thread实现的多线程,每个线程拥有独立的数据。所以在实际项目中,通常用Runnable方式来实现多线程。

  • 相关阅读:
    centos-docker安装及基本使用
    List集合-03.Vector
    List集合-02.LinkedList
    List集合-01.ArrayList
    常用图像处理方法
    git使用
    bug记录
    bash vim等常用命令
    python常用
    MTCNN试用
  • 原文地址:https://www.cnblogs.com/grimm/p/6732504.html
Copyright © 2011-2022 走看看