`
OracleX
  • 浏览: 123540 次
  • 性别: Icon_minigender_1
  • 来自: 地球
社区版块
存档分类
最新评论

线程示例【5】

    博客分类:
  • J2SE
阅读更多
/**
 * 2010-10-2
 * 线程同步-深入理解 
 * 几个线程操作共同资源会出现并发问题
 * 排队上厕所
 */
package com.thread;

public class Demo5 {

	public static void main(String[] args) {

		TicketWindow tw = new TicketWindow();
		Thread t1 = new Thread(tw);
		Thread t2 = new Thread(tw);
		Thread t3 = new Thread(tw);
		t1.start();
		t2.start();
		t3.start();
	}

}

class TicketWindow implements Runnable {

	private int num = 2000;

	private MyDog myDOg=new MyDog();
	public void run() {

		while (true) {
			//if else 语句要保证其原子性(同步代码块)
			//this代表对象本身 任何一个对象都有对象锁
			//并发被控制了
			//对象锁默认标志位是1 是1可以进入,进入后标志位变成0,其他线程不能进入,其他线程在等待池中等待
			//完成后标志位必须置为1,否则会出现死锁----》避免在一个同步块中的线程去操作另一个线程正在使用的同步块中的资源
			/*synchronized (this) {
				if (num > 0) {
					System.out.println(Thread.currentThread().getName()
							+ "正在销售第 " + num + " 张票");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					num--;
				} else {
					System.out.println("票已经售完");
				}
			}*/
			
			//任何一个对象都有对象锁,所以可以是任何对象
			synchronized (myDOg) {
				if (num > 0) {
					System.out.println(Thread.currentThread().getName()
							+ "正在销售第 " + num + " 张票");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					num--;
				} else {
					System.out.println("票已经售完");
				}
			}
		}
	}

}

class MyDog{
	
}
 
分享到:
评论

相关推荐

    java 多线程示例

    本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要性,以及如何处理线程安全问题。 1. **线程的创建** Java提供了两种创建线程的...

    简单的多线程示例delphi7

    总结起来,"简单的多线程示例delphi7"这个项目提供了一个基础的多线程实现,通过TThread类创建新线程,并通过重写Execute方法来定义线程任务。开发者可以通过学习这个示例,理解如何在Delphi 7中进行多线程编程,以...

    java多线程示例

    Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread...本示例演示和wait和sleep、线程锁的使用。

    多线程示例.rar

    "多线程示例.rar"是一个包含完整源码和编译好的示例程序的压缩包,目的是帮助开发者理解如何在Delphi中创建和管理多线程。以下是一些关键的知识点: 1. **TThread 类**:Delphi的`System.Classes`单元中定义了`...

    C++11多线程示例

    本文将深入探讨C++11中的多线程特性,并通过描述中的示例来展示如何创建和管理线程。 首先,要使用C++11的多线程功能,你需要包含`<thread>`头文件。在这个头文件中,定义了一个`std::thread`类,它是创建新线程的...

    多线程编程示例

    在IT领域,多线程编程是一项关键技能,尤其是在性能优化和并发处理方面。本文将深入探讨多线程编程的基础知识,以帮助初学者快速入门。 首先,我们需要理解什么是多线程。多线程是指在一个进程中同时执行多个独立的...

    VB 稳定多线程示例源码

    通过上述讨论,我们可以看到,"VB 稳定多线程示例源码"提供的资源对于学习和理解VB中的多线程编程至关重要。它不仅展示了如何创建和管理线程,还可能包含了如何实现线程同步和异常处理的示例,这对于任何希望提高VB...

    多线程示例

    5. **线程通信**:线程间通信也是多线程编程中不可或缺的部分。MFC提供了一些机制,如消息队列、线程间对象和`WM_COPYDATA`消息,使得线程间可以交换信息。 6. **线程结束**:当线程完成其任务后,应调用`...

    多线程示例源码工程文件

    这是一个多线程的示例工程,非常适合新手学习! 这是一个多线程的示例工程,非常适合新手学习! 这是一个多线程的示例工程,非常适合新手学习! 这是一个多线程的示例工程,非常适合新手学习! 这是一个多线程的示例...

    稳定、方便、实用的VB6多线程技术(附老马的ActiveX多线程示例)

    "嗷嗷叫的老马"分享的示例可能就是利用这个组件来创建和管理线程。使用ActiveX EXE,开发者可以创建一个单独的进程,该进程在后台运行并与其他组件通信,从而实现多线程。这种方式的优点在于代码结构清晰,易于管理...

    关于c#多线程示例

    本示例将深入探讨C#中的多线程实现方法、应用场景以及常见问题。 1. **线程的创建** 在C#中,可以使用`System.Threading`命名空间中的`Thread`类来创建线程。创建新线程的基本步骤是: - 创建一个`Thread`对象...

    QT5线程QThread使用示例

    QT5是Qt库的一个版本,它提供了一个强大的跨平台应用程序开发框架,支持多种操作系统,如...这个示例为理解和实践QT5线程编程提供了一个基础的起点,实际项目中可能需要根据需求进行更复杂的线程同步和资源管理。

    bcb 多线程示例 MutilThread(生产者与消费者)

    在本示例"bcb 多线程示例 MutilThread(生产者与消费者)"中,我们将探讨 Borland C++ Builder (bcb) 平台上的线程应用,特别是生产者-消费者问题的解决方案。 生产者-消费者问题是多线程编程中的一个经典案例,它...

    用C#语言编写的一个多线程示例

    本示例将深入探讨如何在C#中创建和管理线程,以及它带来的优势和挑战。 一、多线程概念 多线程是指在一个进程内同时运行多个独立的执行流,每个执行流被称为一个线程。在C#中,我们可以使用`System.Threading`命名...

    VC++ 线程优先级 示例程序

    5. 等待所有线程结束:使用WaitForMultipleObjects()函数等待所有线程完成。 在实际开发中,合理设置线程优先级有助于提高程序响应速度,避免饥饿现象(低优先级线程长时间无法执行),以及防止优先级反转和优先级...

    powerbuilder 多线程示例

    `threads.pbl`和`threads.pbt`文件很可能是包含了这个多线程示例的相关类库和项目文件。 首先,我们需要创建一个`Thread`对象,这可以通过调用`Create`函数来实现。然后,我们需要定义一个回调函数,这个函数将在子...

    C# winform多线程模板示例,winform多线程例子,C#

    3. **C# WinForm多线程示例** - **后台任务执行**:使用`BackgroundWorker`组件,在`DoWork`事件中编写耗时操作代码。 - **UI更新**:由于跨线程更新UI不安全,需使用控件的`Invoke`或`BeginInvoke`方法确保在主线...

    等线程示例学习等线程示例学习

    等线程示例学习 在计算机编程中,线程是程序执行的基本单元,它允许一个程序同时执行多个任务。在多核或多处理器系统中,线程可以充分利用硬件资源,提高程序的运行效率。"等线程示例学习"着重探讨的是如何在编程中...

Global site tag (gtag.js) - Google Analytics