博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程带来的数据不一致
阅读量:4180 次
发布时间:2019-05-26

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

解决:两种方法

1同步快

import java.util.Random;public class Test13 {
/** * @param args * 多线程带来的数据不一致 * 解决办法 同步机制 1 同步块 2 同步方法(不推荐) */ public static void main(String[] args) { ShellTickOp sto=new ShellTickOp(30); Thread counter1=new Thread(sto,"张三 "); Thread counter2=new Thread(sto,"李四"); Thread counter3=new Thread(sto,"王五"); counter1.start(); counter2.start(); counter3.start(); }}class ShellTickOp implements Runnable{ int tickets; Random r=new Random(); public ShellTickOp(int tickets){ this.tickets=tickets; } @Override public void run() {// while(true){
// // if(tickets>0){
// // try {
// Thread.sleep(800);// System.out.println(Thread.currentThread().getName()+"在shell第"+(tickets--)+"张票");// } catch (InterruptedException e) {
// e.printStackTrace();// }// // }else {
// return;// }// 这里输出到负数了 0 -1 -2:// } // 解决办法 加入同步块 while(true){ synchronized(this){ // 参数是一个对象 任何对象都行 一般用当前对象 用来做对象锁 一个线程进来后就 锁上 if(tickets>0){ try { Thread.sleep(800); System.out.println(Thread.currentThread().getName()+"在shell第"+(tickets--)+"张票"); } catch (InterruptedException e) { e.printStackTrace(); } }else { return; } } } }}

2.同步方法

一般不用 因为用了线程就没有意义了

转载地址:http://fbhai.baihongyu.com/

你可能感兴趣的文章
VS2015 编译live555源码
查看>>
VS2015下编译libeXosip2.5.0
查看>>
x264码率控制参数详解
查看>>
X264在VS2015环境下编译
查看>>
linphone-iphone最新源码编译
查看>>
解读x264_param_default 参数
查看>>
ios编译linphone 开启x264编译
查看>>
x264命令参数与代码对应关系
查看>>
关于编译x264时出现的for Cortex-A8 erratum because it has no mapping symbols问题
查看>>
M3U8格式讲解及实际应用分析
查看>>
流媒体开发之--HLS--M3U8解析(2): HLS草案
查看>>
CMake 手册详解(一)
查看>>
CMake 手册详解(二)
查看>>
CMake 手册详解(三)
查看>>
CMake 手册详解(四)
查看>>
CMake 手册详解(五)
查看>>
CMake 手册详解(六)
查看>>
CMake 手册详解(七)
查看>>
CMake 手册详解(八)
查看>>
CMake手册详解 (九)
查看>>