---摘自高人
因为多线程,所以我们需要对线程进行一些调度,也就是对线程进行一些处理,防止多线程带来的不同步问题。
在Java中,大的说有两种机制去实现多线程的同步,但是本质上来讲,是一种机制,那就是锁。
首先,是Java中的 java.util.concurrent.locks 中的锁。
这个包中有一个接口 Lock, 有一个类 ReentrantLock 实现了 Lock。
该方法中有一个lock方法,也就是获取锁,一旦某一个线程执行到这个方法,该线程就获得了锁。
如果别的线程如果执行到该方法,而锁已经被另一个线程获取了,则该线程被阻塞,直到获得锁的线程执行到 unlock 方法。
也就是说,如果获得锁的线程没有知道 unlock 方法,则别的线程永远不能运行 lock 和 unlock 之间的代码。
为了保证unlock方法用于被执行,一般都采用如下的格式开发:
Java代码
1.Lock l= new ReentrantLock();
2.
3.l.lock();
4.
5.try{
6. //需同步的代码
7.}
8.finally{
9. l.unlock();
10.}
Lock l= new ReentrantLock();
l.lock();
try{
//需同步的代码
}
finally{
l.unlock();
} 这样,就保证了线程的同步。
还有这样一种情况,当同步的代码需要某个条件时,线程才能继续执行。
那就很有可能某一线程获得锁,但是没有条件满足该线程继续运行,那么该线程就白白的浪费了这把锁。
所以,就有一个条件对象来解决这一问题。看下面的代码
Java代码
1.Lock l= new ReentrantLock();
2.Condition cd = l.newCondition(); //生成该锁的条件对象
3.
4.l.lock();
5.
6.try{
7. while( 条件不满足 )
8. cd.await(); // 使得线程释放该锁,并进入该锁的等待池
9.
10. //需同步的代码
11.
12. cd.signalAll(); //唤醒该锁等待池中的所有线程
13.}
14.finally{
15. l.unlock();
16.}
Lock l= new ReentrantLock();
Condition cd = l.newCondition(); //生成该锁的条件对象
l.lock();
try{
while( 条件不满足 )
cd.await(); // 使得线程释放该锁,并进入该锁的等待池
//需同步的代码
cd.signalAll(); //唤醒该锁等待池中的所有线程
}
finally{
l.unlock();
}这样,就实现了对线程的细节控制,使得我们可以精准的控制同步。
除了这个方法,Java中还有另外一种方法,也就是 synchronized 语法。本质上和上面所讲的lock是一样的。
下面同样看一段代码:
Java代码
1.synchronized ( obj ) {
2. //需同步的代码
3.}
synchronized ( obj ) {
//需同步的代码
}
虽然代码简单,但是和第一段代码的效果是一样的。
为了实现条件对象类似的效果,可以使用Object中的wait 和 notify 方法,如下代码:
Java代码
1.synchronized ( obj ){
2. while( 条件不满足 )
3. wait();
4.
5. //需同步的代码
6.
7. notifyAll();
8.}
synchronized ( obj ){
while( 条件不满足 )
wait();
//需同步的代码
notifyAll();
}
效果也同第二段代码一样,所以才说,这两种方法本质上是同一种方法。
分享到:
相关推荐
### Java多线程编程大总结 #### 一、Java多线程编程的演进与重要性 Java多线程编程自Java 5之后经历了显著的革新与扩展,引入了强大的并发包,极大地增强了多线程编程的能力。在Java 5之前,多线程的支持较为薄弱...
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的...
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
### Java多线程学习资料知识点解析 #### 一、引言 Java作为一种广泛使用的编程语言,在并发编程领域具有独特的优势。多线程是Java中实现并发处理的核心技术之一,能够显著提升程序的性能和响应性。本文将深入探讨...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...
Java多线程同步是指在Java语言中,如何使用synchronized关键字和其他同步机制来确保多线程程序的正确执行。在Java语言中,synchronized关键字用于对方法或者代码块进行同步,但是仅仅使用synchronized关键字还不能...
在学习Java多线程的过程中,理解线程与进程的概念是非常基础且重要的一步。首先,进程是一个程序的执行实例,是操作系统资源分配的基本单位,具有独立的地址空间和运行状态。每个进程至少包含一个线程,我们称之为...
Java 中的多线程编程需要解决线程同步问题,以避免线程之间的冲突。Java 提供了两种方法来解决线程同步问题: 1. synchronized 关键字:synchronized 关键字可以用来声明 synchronized 方法或块,以控制对共享资源...
Java多线程与同步是Java编程中的核心概念,它们在构建高效、响应迅速的应用程序时起着至关重要的作用。在大型系统开发中,多线程技术使得程序能够同时执行多个任务,提高系统的并发性,而同步机制则确保了在多线程...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...
总之,实现Java多线程进度条涉及线程同步、共享数据更新以及UI更新的协调。理解这些核心概念,并根据具体需求选择合适的方法,是构建高效、用户友好进度条的关键。在ProgressTest这个示例项目中,你可能会找到更多...
这个“JAVA-多线程 所有文件”压缩包很可能包含了一系列关于Java多线程学习的源代码示例和相关文档。下面我们将深入探讨Java多线程的相关知识点。 1. **线程的概念**:线程是操作系统分配CPU时间的基本单位,一个...
总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个方面,深入理解和掌握这些知识点对于提升Java程序的性能和复杂性至关重要。通过阅读提供的"Java多线程.pdf"文档,你可以进一步了解和...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...