如果某个synchronized 方法是static 的,那么当线程访问该方法时,
它锁的并不是synchronized方法所在的对象,而是synchronized方
法所在的对象所对应的Class 对象,因为Java中无论一个类有多少个
对象,这些对象会对应唯一一个CLASS对象,因些当线程分别访问
同一个类的两个对象的两个static,synchronized方法时,他们的执行
顺序的,也就是说一个线程先去执行方法,执行完毕后另一个线程
在执行。
-------------------------------------------------
package thread;
public class ThreadTest4 {
public static void main(String[] args) {
Example example = new Example();
TheThread thread = new TheThread(example);
example = new Example();
TheThread2 thread1 = new TheThread2(example);
thread.start();
thread1.start();
}
}
class Example {
public static void execute() {
for(int i = 0; i < 20 ;i++) {
System.out.println("hello: "+i);
}
}
public synchronized static void execute2() {
for(int i = 0; i < 20 ;i++) {
System.out.println("word: "+i);
}
}
}
class TheThread extends Thread {
private Example example;
public TheThread(Example example) {
this.example = example;
}
@Override
public void run() {
// TODO Auto-generated method stub
example.execute();
}
}
class TheThread2 extends Thread {
private Example example;
public TheThread2(Example example) {
this.example = example;
}
@Override
public void run() {
// TODO Auto-generated method stub
example.execute2();
}
}
结果:
--------------------------------------------------
hello: 0
hello: 1
word: 0
hello: 2
word: 1
hello: 3
word: 2
hello: 4
word: 3
word: 4
word: 5
word: 6
word: 7
word: 8
word: 9
word: 10
word: 11
word: 12
word: 13
word: 14
word: 15
word: 16
word: 17
hello: 5
hello: 6
hello: 7
hello: 8
hello: 9
hello: 10
hello: 11
hello: 12
hello: 13
hello: 14
hello: 15
hello: 16
hello: 17
hello: 18
hello: 19
word: 18
word: 19
分享到:
相关推荐
Video-2024-10-05下午-线程同步2.wmv
在VC++编程环境中,线程同步是一个至关重要的概念,特别是在多线程程序设计中,以确保并发执行的线程能够安全地访问共享资源,避免数据竞争和其他潜在的问题。本篇文章将详细探讨线程锁在VC++中的应用,以及如何通过...
MFC 多线程及线程同步 MFC 多线程及线程同步 MFC 多线程及线程同步
### Linux线程同步详解 #### 一、引言 随着计算机技术的发展,多核处理器的普及使得并发编程成为提升程序性能的重要手段。在Linux环境下,多线程编程因其高效的资源利用和灵活的任务调度受到广泛欢迎。然而,多...
在编程领域,线程同步是多线程编程中的一个核心概念,它涉及到如何有效地管理和协调多个并发执行的线程,确保它们能正确地共享资源,避免数据竞争和死锁等问题。这个“线程同步小例子”是基于孙鑫先生著作中的示例...
线程同步是多线程编程中的重要概念,用于协调多个并发执行的线程,确保它们在访问共享资源时不会产生竞态条件或数据不一致性。在Windows编程中,提供了多种线程同步机制,包括互斥量、临界区、原子操作、事件以及...
在编程领域,线程同步是多线程编程中的一个重要概念,它确保了多个线程在访问共享资源时的正确性和一致性。在这个“VC++线程同步实例”中,我们将探讨如何利用VC++(Visual C++)来实现线程间的同步,以避免数据竞争...
"Java多线程同步.pdf" Java多线程同步是指在Java语言中,如何使用synchronized关键字和其他同步机制来确保多线程程序的正确执行。在Java语言中,synchronized关键字用于对方法或者代码块进行同步,但是仅仅使用...
"多线程的批量线程同步解决方案"这个标题暗示我们探讨的是如何在多线程环境下有效地管理和同步多个任务,确保数据一致性与程序正确性。下面将详细阐述相关知识点。 一、多线程基础 多线程是指在一个进程中同时执行...
在`thread2`中,很可能通过调用`CreateMutex`、`WaitForSingleObject`和`ReleaseMutex`等API函数实现了基于互斥量的线程同步,确保了对共享资源的独占访问。 然后,我们讨论一下Peterson算法。Peterson算法是由Glen...
在多线程编程中,线程同步是一种控制多个线程并发执行时访问共享资源的方式,以避免数据不一致和死锁等问题。以下是对线程同步的四种主要方式的详细解释: 1. **事件(Event)** 事件是Windows API提供的一种线程...
然而,多线程环境下也带来了一些问题,尤其是资源竞争和数据一致性问题,这些问题需要通过线程同步机制来解决。本文将详细介绍如何通过临界区、互斥内核对象、事件内核对象和信号量内核对象来实现线程同步。 1. ...
2. **软件方案**:在没有系统级同步原语的情况下,可以使用自旋锁、信号量等软件方法来实现线程同步。自旋锁是一种简单的机制,线程在尝试进入临界区失败时,会不断地检查条件是否满足,直到可以进入为止,不释放CPU...
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序;...2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
2. **线程同步**:当多个线程访问共享资源时,可能会引发竞态条件,导致数据不一致。为避免这种情况,需要进行线程同步。Delphi 提供了几种同步机制,如 `TEvent`, `TMutex`, `TCriticalSection` 和 `TSemaphore`。...
本篇文章将深入探讨三种在C++中实现多线程同步的方法:事件对象、关键代码段和互斥对象。 首先,我们来看**事件对象**。事件对象是一种信号机制,用于线程间通信和同步。在Windows API中,CreateEvent函数创建一个...
### 线程同步技术深度解析 #### 引言 多线程编程是现代软件开发不可或缺的一部分,尤其在追求高效能和响应性时更是如此。然而,随着多线程的应用,线程同步问题逐渐凸显,成为确保程序稳定性和正确性的关键。线程...
本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...
2. **Mutex**:与`Monitor`类似,`Mutex`也用于控制对共享资源的独占访问,但它的作用范围可以跨越进程,允许不同进程中的线程同步。 3. **Semaphore**:信号量是一种更灵活的同步机制,它允许指定数量的线程同时...