- 浏览: 77412 次
- 性别:
- 来自: 深圳
文章分类
最新评论
class TWindow implements Runnable{ private int ticketNum =100; public void run(){ while(true){ if(ticketNum > 0) System.out.println(Thread.currentThread().getName() +" sale "+ ticketNum--); } } } class ThreadDemo{ public static void main(String[] args){ TWindow t = new TWindow(); 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(); } }
安全隐患:见附件截图
/* 通过分析发现,打印出0,-1,-2等错票 多线程的运行出现了安全问题 问题的原因: 当多条语句在操作同一个线程共享数据时,一个线程对多条语句 只执行一部分,还没执行完,另一个线程参与进来执行,导致共享 数据的错误。 解决办法: 对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程 中,其它线程不可以参与执行。 java对于多线程的安全问题提供了解决方式,就是同步代码块。 synchronized(对象) { 需要被同步的代码 } 对象如同锁,只有锁的线程可以在同步中执行。 没有锁的线程即使有cpu使用权,也进不去,因为没有锁。 同步的前提: 1.必须要有两个或两个以上的线程 2.必须是多个线程使用同一个锁 必须保证同步中只能有一个线程在运行 好处:解决了多线程的安全问题 弊端:多个线程需要判断锁,较为消耗资源 */ class TWindow implements Runnable{ private int ticketNum =100; Object obj = new Object(); public void run(){ while(true){ sychronized(obj){ if(ticketNum > 0){ try{ Thread.sleep(10); } catch(Exception e){ } System.out.println(Thread.currentThread().getName() +" sale "+ ticketNum--); } } } } } class ThreadDemo{ public static void main(String[] args){ TWindow t = new TWindow(); 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(); } }
发表评论
-
151多线程(优先级&yield方法)
2015-10-28 11:16 694/* 养成习惯:数据共享用静态 */ class Dem ... -
150_多线程(Join方法)
2015-10-27 18:31 610/* join: 当A线程执行到了B线程的join方法 ... -
114_面向对象(多异常处理)_黑马程序员_Java基础视频
2015-10-25 23:27 695/* 对多异常的处理 1.生命异常时,建议声明更为具体的异 ... -
113_面向对象(异常声明throws)_黑马程序员_Java基础视频
2015-10-25 23:26 481/* 异常:就是程序在运行时出现不正常情况 异常由来:问题 ... -
112_面向对象(异常try-catch)
2015-10-25 23:25 733/* 异常:就是程序在运行时出现不正常情况 异常由来:问题 ... -
148_多线程(停止线程)
2015-10-25 23:16 581/* stop方法已经过时。 如何停止线程? 只有一 ... -
147_多线程(线程间通信-生产者消费者JDK5.0升级版)
2015-10-21 23:33 751/*JDK1.5及以上提供了多线程升级解决方案。 将同步Sy ... -
146_多线程(线程间通信-生产者消费者)
2015-10-20 23:35 627一个生产者一个消费者 ... -
144_多线程(线程间通信-等待唤醒机制)
2015-10-20 18:35 721class Res{ String name; Str ... -
142_多线程-线程间通信
2015-10-20 16:18 703/* 线程间通讯: 其实就是多线程在操作同一个资源。 但 ... -
141多线程-死锁
2015-10-20 14:45 694/* 死锁: 同步中嵌套同步 */ class T ... -
140_多线程(多线程-单例设计模式-懒汉式)
2015-10-19 11:45 689/* 单例设计模式 饿汉式 class Single ... -
138_多线程(多线程-同步函数的锁是this)
2015-10-15 14:48 848/* 同步函数用的是哪一个锁呢? 函数需要被对象调用。那么 ... -
137_多线程(多线程-同步函数)
2015-10-13 23:25 599/* 需求:银行有一个金库。 有两个储户分别存300元 ... -
多线程(创建线程-实现Runnable接口)
2015-10-10 00:19 554class TWindow implements Runnab ... -
133_多线程(售票的例子)
2015-10-09 23:48 646/* 需求:简单的买票程序 多个窗口卖票 */ c ... -
132_多线程(获取线程对象以及名称)
2015-10-09 23:30 1216/* 练习:创建两个线程,和主线程交替运行 线程都有自 ... -
多线程-继承Thread类
2015-10-09 00:26 1560/* 进程:是一个正在执行中的程序 每一个进程执行都有一个 ... -
包的应用
2015-10-08 23:28 1665package pack; class PackageD ... -
异常总结
2015-10-05 20:07 574异常是什么? 是对问题的描述,将问题进行对象的封装。 ...
相关推荐
多线程求π的过程中,还需要考虑线程安全问题。当多个线程同时写入或读取共享数据时,可能会出现竞态条件,导致结果不准确。因此,可能需要使用互斥锁(mutex)或条件变量(condition variable)来保护共享资源,...
标题中的“mp.rar_socket 多线程_tcp 多线程_tcp 线程_多线程 Socket_网络 扫描器”表明这是一个关于使用多线程Socket编程实现TCP网络扫描器的项目。TCP扫描器通常用于网络安全检测,通过尝试与目标主机建立连接,...
学习Delphi的多线程编程不仅可以提升应用程序的性能,还能帮助开发者解决复杂的并发问题。理解并熟练运用TThread类和相关的同步机制是Delphi开发人员必备的技能之一。通过阅读这些教程和资料,开发者将能更深入地...
6. 多线程安全:处理并发访问同一资源时可能出现的竞争条件,如锁和同步机制的应用。 在开发这样的应用时,开发者需要深入理解FTP协议规范,掌握VC++的多线程编程技巧,以及如何在实际网络环境中优化文件传输性能。...
在VB(Visual Basic)编程环境中,多线程技术是一种关键的高级特性,它允许应用程序同时执行多个任务,显著...在实际应用中,开发者还需要考虑性能优化、资源管理以及兼容性等问题,以构建更加完善的多线程下载程序。
设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到解决方案。在Java中,多线程设计模式的应用能够提升系统的性能、可扩展性和可维护性。 一、线程基础 在Java中...
同时,你也会了解到如何处理线程安全问题,避免竞态条件和死锁的发生,这对于任何多线程编程都是至关重要的。 总结一下,这个压缩包提供了使用MFC进行多线程编程的实际案例,特别是针对端口扫描的应用。通过研究和...
在标题和描述中提到的“CoProc_MultiThread_autoit3_autoit_多线程_au3多线程_au3_”主题,重点是使用 AutoIt 3 来实现多线程功能。在AutoIt中,多线程是非常有用的,它允许脚本同时执行多个任务,提高程序的效率和...
QT是Qt库的缩写,它是一个开源的...QT的多线程机制为开发者提供了强大的工具,但也需要谨慎处理,以防止出现潜在的并发问题。通过深入理解这些知识点,开发者能够编写出高效、稳定且用户体验良好的多线程QT应用程序。
在描述中提到的“多线程卖票”场景,常见的问题是线程安全。当多个线程试图同时修改同一资源(比如票的数量)时,如果没有适当的同步机制,可能会出现数据不一致的情况。为了解决这个问题,开发者通常会使用互斥锁...
在多线程环境中,线程间的数据共享和资源访问可能会引发竞态条件和死锁问题。Delphi提供了多种同步机制来解决这些问题,如: 1. 事件(Synchronize):允许线程在主线程中安全地执行代码,确保数据一致性。 2. 互斥...
3. **同步机制**:由于多线程环境下可能存在数据竞争问题,因此需要使用如TSyncronizedQueue、TCriticalSection或TMonitor等同步组件来确保数据的安全访问。 4. **事件通知**:线程可能通过发布事件或者使用回调函数...
2. **线程同步**:由于多线程环境下可能会存在数据竞争,因此需要使用`pthread_mutex_t`互斥锁或`pthread_rwlock_t`读写锁来保护共享资源的安全性,确保同一时刻只有一个线程访问。 3. **套接字编程**:服务器会...
为了保证线程安全,开发人员可能使用锁或其他同步原语来保护共享资源,防止数据竞争和死锁的发生。 在压缩包中的"CollThread"文件可能是整个项目的源代码文件,包含了实现多线程数据采集和显示的相关单元、类、函数...
在IT领域,多线程技术是提升程序性能和效率的重要手段,特别是在文件传输场景中。本文将详细讨论“MTS.rar”压缩包所涉及的多线程文件传输的知识点,包括多线程的概念、实现原理以及它在文件传输中的应用。 多线程...
标题中的“DSLDirectiveProcessor.zip_.net_c# 多线程_多线程 C#”暗示了这是一个关于C#编程语言的项目,特别关注于.NET框架下的多线程处理。这个压缩包可能包含了实现多线程处理的一个或多个类库,其中的核心组件...
在多线程环境中,数据访问需要确保线程安全,防止竞态条件。这里我们使用互斥量(`std::mutex`)来实现线程同步。当一个线程正在访问ListCtrl时,其他线程必须等待,直到互斥量解锁。`std::lock_guard`是自动管理锁...
而多线程技术可以解决这个问题,通过为每个客户端创建一个新的线程,服务器可以并发地处理多个客户端连接,显著提高服务效率。 在Java中,创建多线程的方式有继承`Thread`类或实现`Runnable`接口。对于TCP服务器,...
标题中的“一个多线程的后台管理扫描器.rar_delphi 多线程_delphi 后台_delphi多线程_后台扫描_多线程delphi”表明这是一个基于Delphi编程语言开发的多线程应用程序,主要功能是后台扫描。Delphi是一款强大的Windows...
多线程的使用需要注意线程安全问题,例如资源共享和竞态条件。为了防止数据冲突,可能需要使用同步机制,如synchronized关键字或者java.util.concurrent并发工具类。此外,还要关注线程生命周期管理,避免资源浪费和...