package function.thread;
class ThreadDemo1 implements Runnable {
public void run() {
// 为了更清楚地看到不正确的结果,这里放一个大的循环
String ThreadName = Thread.currentThread().getName();
if (ThreadName.equals("Thread-0")) {
System.out.println(ThreadName+" enter synchronized before.....\n");
synchronized (this) {//锁住的不是当前整个对象,而是和当前对象里同步相关的内容
System.out.println(ThreadName+" enter.....");
try {
for(int i = 0;i<10;i++){
System.out.println(ThreadName+" print ....");
// 为了演示产生的问题,这里设置一次睡眠
Thread.sleep(200);
}
} catch (InterruptedException e) {
}
// 输出结果
System.out.println(ThreadName+" go off.....\n");
}
} else if (ThreadName.equals("Thread-1")) {
//即使竞争线程进入了上述if 分支,并且进入到了syschronize块里
//另外的线程也可以可以执行如下syschronize之前的内容
//所以锁对象是一个概念,是一种机制,而不是字面上理解的锁住整个对象
try {
for(int j =0;j<10;j++){
System.out.println(ThreadName+" enter synchronized before....."+j);
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) {
System.out.println(ThreadName+" enter.....");
try {
for(int i = 0;i<10;i++){
System.out.println(ThreadName+" print......");
Thread.sleep(200);
}
} catch (InterruptedException e) {
}
System.out.println(ThreadName+" go off.....\n");
}
}
}
}
public class ThreadSync1 {
public static void main(String args[]) {
ThreadDemo1 th1 = new ThreadDemo1();
new Thread(th1).start();
new Thread(th1).start();
}
}
运行结果:
Thread-0 enter synchronized before.....
Thread-1 enter synchronized before.....0
Thread-0 enter.....
Thread-0 print ....
Thread-0 print ....
Thread-1 enter synchronized before.....1
Thread-0 print ....
Thread-1 enter synchronized before.....2
Thread-0 print ....
Thread-1 enter synchronized before.....3
Thread-0 print ....
Thread-1 enter synchronized before.....4
Thread-0 print ....
Thread-1 enter synchronized before.....5
Thread-0 print ....
Thread-1 enter synchronized before.....6
Thread-0 print ....
Thread-1 enter synchronized before.....7
Thread-0 print ....
Thread-1 enter synchronized before.....8
Thread-0 print ....
Thread-1 enter synchronized before.....9
Thread-0 go off.....
Thread-1 enter.....
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 print......
Thread-1 go off.....
相关推荐
基于Java并发编程的多线程同步与锁机制 项目简介 本项目旨在深入探讨Java并发编程中的多线程同步与锁机制,涵盖了从基础的线程创建、同步方法到高级的并发工具类如ReentrantLock、ReadWriteLock、Atomic类等的...
本示例"java多线程的条件对象和锁对象demo"着重探讨了如何利用锁对象和条件对象来精细控制线程的执行流程。 首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它...
在VC++ MFC(Microsoft Foundation Classes)环境中,开发多线程应用是一项常见任务,尤其是在处理大量...学习和理解这些实例,将有助于开发者深入掌握多线程同步技术,并在实际项目中有效利用,提高程序的效率和稳定性。
总之,理解 Delphi 的多线程和线程同步是编写高效、健壮的并发程序的关键。通过学习和实践这两个示例,你可以提升在实际项目中解决并发问题的能力,更好地应对高并发场景下的编程挑战。记得在编写多线程代码时,始终...
在编程领域,尤其是在Java这样的多线程环境中,理解和掌握多线程同步与通讯至关重要。本文将深入探讨这些概念,以及如何使用synchronized关键字、wait-notify机制和Lock接口来实现线程间的同步与通讯。 首先,多...
本文将深入探讨如何在C#中实现多线程同步并发操作,这不仅对于提高软件性能至关重要,也是高级程序员必须掌握的核心技能之一。 ### C#中的多线程同步并发操作 多线程编程可以极大地提高CPU的利用率,特别是在处理I...
线程同步是多线程编程中的一个重要概念,用于解决多个线程并发访问共享资源时可能出现的数据不一致性问题。在Java中,线程同步主要通过关键字`synchronized`来实现,它可以确保在同一时间只有一个线程能够执行特定的...
本文主要讨论了VC++6.0环境下多线程同步的几种方法,包括临界区、事件、信号量和互斥内核对象。 **临界区**是实现线程同步的基本手段之一,它确保在同一时刻只有一个线程能够访问特定的代码区域或资源。在VC++6.0中...
本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...
在多线程编程中,线程同步是一种关键的技术,它确保了多个线程在访问共享资源时能够有序、安全地进行。MFC(Microsoft Foundation Classes)库为C++程序员提供了丰富的线程同步机制,其中CEvent类是常用的一种。本文...
本文将深入探讨在.NET框架中用于多线程同步的三个主要工具:Monitor、Mutex和EventWaitHandle,并结合提供的"五个多线程同步应用小程序",解释它们的应用场景和使用方法。 首先,我们来看Monitor类。Monitor是.NET...
在编程领域,尤其是在Windows平台下开发C++应用时,多线程技术是非常关键的一部分,它允许程序同时执行多个任务,从而提升系统效率。...因此,对多线程同步的理解和应用能力是每个专业程序员必备的技能之一。
总之,这个实验旨在让学生理解和实践多线程同步,特别是通过C++的`<thread>`库和互斥量来实现。通过分析和改进"Counter"类,学生可以深入理解并发编程中的挑战以及如何使用同步机制来确保程序的正确性。同时,对线程...
通过深入研究和实践"MfcMutexes"程序,你可以更好地理解如何在MFC环境中处理多线程同步问题,以及如何预防和解决潜在的并发问题。这不仅有助于提升你的编程技能,还能让你在面对复杂的多线程应用时更加游刃有余。
在Java编程语言中,多线程同步是一种控制多个线程并发执行的重要机制,它确保了共享资源的安全访问,防止数据不一致性和竞态条件的发生。本文将深入探讨Java中的多线程同步方法,并通过实例来阐述其工作原理。 首先...
本文将深入探讨C#中的多线程机制,包括线程互斥与同步,以及如何在WPF主界面中安全地更新UI。 首先,让我们理解什么是多线程。多线程是指一个应用程序内同时运行多个独立的执行线程。在C#中,可以使用`System....
.NET中的多线程同步是确保在并发环境下多个线程安全访问共享资源的关键技术。本文将深入探讨.NET框架中实现线程同步的多种方法。 首先,我们来看自由锁(InterLocked)。自由锁主要通过Interlocked类提供的静态方法来...