博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java笔记16:多线程共享数据
阅读量:6549 次
发布时间:2019-06-24

本文共 1098 字,大约阅读时间需要 3 分钟。

一、Thread实现

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

你可能感兴趣的文章
ostack
查看>>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
查看>>
dedecms
查看>>
阿里云ubuntu服务器安装使用mysql并配置远程连接记录
查看>>
js 变量作用域 与 this
查看>>
arrow function
查看>>
AOP的XML实现方式
查看>>
linux普通用户获取管理员权限
查看>>
PHP是干什么用?
查看>>
design_patterns_in_typescript 学习
查看>>
Eamon 埃蒙
查看>>
HDU4305 Lightning
查看>>
资料自用~
查看>>
Java基础
查看>>
Ka的递归编程练习 Final.Part8|回溯前传二|排列组合
查看>>
Linux 修改hostname 文件
查看>>
Android退出方式
查看>>
[LeetCode] NO. 141 Linked List Cycle
查看>>
[线段树]JZOJ 5812
查看>>
数据库下的分页代码
查看>>