/**
多线程--运行出现了安全问题
通过分析 多线程--简单的卖票程序
发现 打印出0,-1,-2等错票
问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,
还没有执行完,另一个线程参与进来执行。导致共享数据的错误。
解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完。在执行的过程中,其他线程
不可以参与执行。
Java对于多线程的安全问题提供了专业的解决方式
就是同步代码块
synchronized(对象){
需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权 也进不去 因为没有获取锁
同步的前提:
1.必须要有两个或者两个以上的线程
2.必须是多个线程使用同一个锁
必须保证同步中只能有一个线程在运行
好处:解决的多线程的安全问题
弊端:多个线程都需要判断锁,较为消耗资源
*/
class Ticket implements Runnable
{
private int ticketNum = 100;
Object obj = new Object();
public void run(){
while(true){
synchronized(obj){
if(ticketNum>0){
try{
Thread.sleep(10);
}catch(Exception e){
}
System.out.println(Thread.currentThread().getName()+":sale..." + ticketNum--);
}
}
}
}
}
class TicketDemo2
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);//创建了一个线程
Thread t2 = new Thread(t);//创建了一个线程
Thread t3 = new Thread(t);//创建了一个线程
Thread t4 = new Thread(t);//创建了一个线程
t1.start();
t2.start();
t3.start();
t4.start();
}
}
分享到:
相关推荐
使用线程池管理多线程上传,包含了文件拆分,文件分片多线程上传,单文件上传。多线程执行任务等待管理。拒绝直接new Thread创建新线程导致的诸多问题
java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...
Java毕业设计(可运行)多线程与线程安全实践-基于Http协议的断点续传.zip
多线程是一种提高程序运行效率和性能的常用技术。 随着我们学习工作的深入,在编程中或多或少会涉及到 需要多线程的情况。多数时候,我们的操作模式是后台 线程中处理数据,计算结果,然后在前台界面(GUI) 中更新...
.doc 格式 详细解析多线程技术 基础篇 • 怎样创建一个线程 • 受托管的线程与 Windows线程 • 前台线程与后台线程 • 名为BeginXXX和EndXXX的方法是做什么用的 • 异步和多线程有什么关联 WinForm多线程编程...
Java多线程与线程安全实践-基于Http协议的断点续传毕业设计—(包含完整源码可运行).rar
线程是程序独立运行的基本单位,一个程序通过执行多个线程可以提高机器本身资源的利用率,同时也可以完成多任务并行运行的操作,多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。 互斥体 互斥体与临界区...
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了。然而这并不是多线程编...
内容概要:简洁的多线程网络包嗅探器 环境依赖: Python3 winpcap(if you are using Linux, please install libpcap) pcapy PyQt5 设计简介: 本次设计采用的编程语言为python。在Windows和Linux平台下先分别安装...
6:使用状态模式 观察者模式更好的处理多线程 最初的想法:网络优化开发框架 (移除任务未完成) 网络稳定,系统运行稳定性,大内存消耗稳定,长时间运行稳定性 (旧的系统症结所在) 开启过多线程,导致系统...
3.1 线程安全 多线程编程时,由于系统对线程的调度具有一定的随机性,所以,使用多个线程操作同一个数据时,容易出现线程安全问题。 当多个线程访问同一个资源时,如果控制不好,也会造成数据的不正确性。 以银行取...
多线程学习,通过两个函数来测试多线程的运行原理,运行时可以反复看时间的先后
多线程的常见问题总结分析 1、多线程技术介绍 2、主线程介绍 3、创建线程的方式 4、线程中的异常问题 5、线程运行状态 6、线程第二种创建方式 7、多线程练习 8、线程安全问题分析和解决 9、多线程细节 10、同步使用...
线程安全双向链表实现2次检验,中间包含3个线程,代码完善。可以vs与vc++运行,没有问题
• 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨线程修改UI线程控件的值 ...
资源名:2022年JAVA毕业设计精品项目源码29期:基于JAVA的多线程与线程安全的Http协议断点续传.zip 资源类型:毕业设计项目源码+论文 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能...
为使需要发生的封送处理量减到最少,并确保以线程安全方式处理调用, 应使用Control.BeginInvoke或Control.Invoke方法来调用主执行线程上的方法,从而使必须发生的跨线程边界的封送处理量减到最少。
多线程是一种提高程序运行效率和性能的常用技术。 随着我们学习工作的深入,在编程中或多或少会涉及到 需要多线程的情况。多数时候,我们的操作模式是后台 线程中处理数据,计算结果,然后在前台界面(GUI) 中更新...
java多线程简单的描述以及线程的安全、并发,同步机制
多线程 目录 进程 进程的了解 线程 什么是线程 线程的组成 线程的创建 线程的状态 线程的方法 线程的安全问题 1.进程 1.1.进程的了解 简单的来说进程就是运行中的程序,简称为进程。 单核CPU在任意一个时间节点上,...