• 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方式来实现多线程。

  • 相关阅读:
    Jmter组件执行顺序
    Win7X64位Seleniume+Eclipse+Pydev环境搭建
    软件测试自学指南---从入门到精通(转载)
    Python开发【第四篇】:Python基础之函数
    Python开发【第三篇】:Python基本数据类型
    Python开发【第二篇】:初识Python
    Python开发【第一篇】:目录
    个人作业3——个人总结(Alpha阶段)
    结对编程2——单元测试(201421123040,60,61)
    个人作业2——英语学习APP案例分析
  • 原文地址:https://www.cnblogs.com/grimm/p/6732504.html
Copyright © 2020-2023  润新知