`
wststar
  • 浏览: 17825 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程--运行出现了安全问题

 
阅读更多

/**

多线程--运行出现了安全问题

 通过分析 多线程--简单的卖票程序 

发现 打印出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();


}

}


分享到:
评论

相关推荐

    多线程--下载---后台运行

    在IT行业中,多线程和后台下载是两个关键的技术概念,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨这两个主题,并结合具体的后台服务和下载技术来讲解它们的实际应用。 首先,让我们理解什么是多线程。在...

    多线程-day02.docx

    【多线程编程详解】 在Java编程中,多线程技术是实现并发处理和提高系统效率的关键。在“多线程-day02”的学习资源中,我们深入探讨了Java内存模型以及多线程的特性与控制机制。 **Java内存模型** Java内存模型,...

    Python应用实战:python多线程-多线程安全问题&lock与rlock.zip

    在Python编程中,多线程是一种常见的并发执行方式,它允许多个任务同时运行,以提高程序的效率。然而,多线程环境下也存在一系列安全问题,这些问题主要源自资源竞争和数据同步。本篇文章将深入探讨Python中的多线程...

    Java多线程-同步机制解决线程安全问题方式二:同步方法

    在Java多线程编程中,线程安全问题通常是指多个线程访问共享资源时可能出现的不一致或错误状态。为了确保并发执行的线程能够正确地处理这些共享资源,Java提供了多种同步机制,其中之一就是同步方法。同步方法通过在...

    Java多线程-线程安全问题练习题

    在Java多线程编程中,线程安全问题是非常关键的概念,它涉及到多个线程访问共享资源时可能出现的数据不一致或异常情况。本题主要通过两个练习题来加深对线程安全的理解。 ### 练习题1:新年倒计时 #### 题目描述 ...

    Java多线程-同步机制解决线程安全问题方式一:同步代码块

    - 识别线程安全问题:首先确定哪部分代码是多线程运行的,然后判断是否存在共享数据,最后看是否有多个线程同时操作共享数据。 - 解决线程安全问题:将操作共享数据的代码放入同步范围内,确保同一时间只有一个线程...

    大恒-双相机开发-C#-多线程-项目开源

    在处理实时图像流时,多线程能有效避免单一线程因大量计算导致的阻塞问题,提高程序的并行处理能力。项目中,开发人员创建了独立的线程来分别处理两个相机的数据采集和图像显示,确保了系统流畅运行。此外,他们还...

    多线程-VB.net开发实例_vb.net多线程_

    本实例主要关注如何在VB.NET中实现多线程,通过创建并运行三个具有类似功能的方法——TestMethod1、TestMethod2和TestMethod3,来演示如何利用多线程来并发地进行输出操作。 1. **线程基础知识**:线程是程序执行的...

    Java多线程-多线程知识点总结和企业真题

    - **线程安全问题**:当多个线程访问同一资源时可能会出现数据不一致的问题。 - **同步机制**:通过`synchronized`关键字、`ReentrantLock`等来控制对共享资源的访问,确保线程安全。 5. **解决单例模式中的懒汉...

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 ...使用Java多线程技术,我们可以有效地解决这一问题,保证系统稳定运行。在实际应用中,还需要根据具体的业务需求调整和优化上述设计方案,以满足不同的并发控制需求。

    servlet线程安全问题

    Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常细致地考虑多线程的安全性问题。 Servlet 的多线程机制是建立在 Java 多线程机制之上的。Servlet 容器会自动使用线程池等技术来支持...

    Java毕业设计-多线程与线程安全实践-基于Http协议的断点续传.zip

    线程安全是多线程编程中必须考虑的问题,主要是防止多个线程访问同一资源时出现数据不一致或竞态条件。Java提供了多种机制来保证线程安全,如`synchronized`关键字、`volatile`关键字、`Atomic`类等。在这个毕业设计...

    Delphi多线程的安全问题分析及解决

    本文深入探讨了Delphi环境下多线程运行过程中可能遇到的安全问题及其解决方案。在Windows操作系统中,多线程技术因其高效性和灵活性而被广泛应用于软件开发之中。然而,随着多线程应用的普及,线程间的同步与资源...

    多线程实例-摇奖机源码

    总的来说,"多线程实例-摇奖机源码"是一个很好的学习资源,它可以帮助新手理解如何在C#中创建和控制多线程,以及如何处理线程同步和安全问题。通过分析和运行这个源码,你可以深入掌握多线程编程的基础,并为以后的...

    多线程-委托-回调实例.zip

    4. **Windows Forms应用中的多线程实践**:在Windows Forms应用中,由于UI控件不是线程安全的,直接在非UI线程上修改控件可能会导致异常。`Control.Invoke`或`Control.BeginInvoke`方法用于在正确的线程上调用UI更新...

    在Qt(C++)中使用QThread实现多线程 - 星夜之夏 - 博客园1

    综上所述,Qt中的QThread提供了灵活且安全的方式来管理和执行多线程任务,通过信号槽机制实现线程间的通信,确保了在执行长时间任务时,用户界面仍然保持响应性。理解并熟练运用这些知识点,对于构建高效、稳定的多...

    进程与线程--小练习

    线程的创建、销毁和切换相比进程更快速,因此多线程常用于提高程序的并发性能。 进程与线程的主要区别在于资源分配和独立性。进程是资源分配的基本单位,而线程是调度的基本单位。一个进程内的多个线程可以并发执行...

    多线程-狂神说Java学习笔记

    本学习笔记将深入探讨Java多线程的相关知识,包括其原理、实现方式、同步机制以及常见问题。 ### 一、多线程的基本概念 多线程是指在一个程序中存在两个或更多的执行线程,这些线程共享同一内存空间,但各自拥有...

    Linux多线程-相关手写笔记

    在Linux操作系统中,多线程是一种程序执行方式,它允许多个执行流同时在单个进程中运行。这种并发执行能够提高资源利用率,特别是在处理器核心数增多的情况下,多线程可以充分利用硬件资源,提升程序性能。本篇笔记...

Global site tag (gtag.js) - Google Analytics