在目前开发的java多线程程序中用的最多的锁就是Synchronized和ReentrantLock,相信大多是童鞋都用过Synchronized但是对ReentrantLock可能了解的不多,下面就详细的对比分析一下两种锁的不同之处和用法
先说Synchronized,这种锁用起来比较简单,这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行 它包括两种用法:synchronized 方法和 synchronized 块。 但是容易造成线程的阻塞,导致线程池中最后无线程可用。下面举一个简单的例子
synchronized(syncObject) {
//允许访问控制的代码
通过socket连接另外一台设备(超时时间设为60s)
}
但是这个线程每20秒钟启动一次,那么就会造成线程的堆积。例如,在设备连接中断的情况下,线程T1启动去连接这个设备,那么在超时之前T1是不会释放这个锁的,在20s的时候线程T2启动,然后T2被阻塞,等待T1在60s超时时释放锁,这样循环下去,导致启动的线程越来越多,最后导致系统线程池中的资源耗尽。
而ReentrantLock可以很好的解决这个问题
private Lock lock;
lock = new ReentrantLock(false);
if (lock.tryLock()) {
//若获取锁成功,读取当前sc的数据
try {
//允许访问控制的代码
通过socket连接另外一台设备(超时时间设为60s)
}
}catch(DeviceException de) {
de.printStackTrace();
}finally {
lock.unlock();
}
}
else {
//若获取锁失败,直接放弃本次尝试,接着循环读取列表中下一个sc的数据
//do nothing here, equals to continue loop
}
上面这段代码就很容易的解决了堆积这个问题,例如当线程T1在获得锁之后,线程T2试图去获得锁,如果成功T2就执行try中的代码,如果不成功,T2就放弃获得锁,这样就不会存在线程堆积了。不过记得使用ReentrantLock的话一定记得使用lock.unlock();方法解锁,因为ReentrantLock不会像Synchronized一样自动解锁
相关推荐
Java多线程与锁是Java并发编程中的核心概念,它们对于构建高效、可扩展的并发应用程序至关重要。在Java中,多线程允许程序同时执行多个任务,提高CPU的利用率,而锁则是用来控制多线程间共享资源的访问,确保数据的...
Java 中的多线程编程需要充分考虑线程安全和锁机制的问题,否则可能会导致程序的执行不稳定和崩溃。Lock 机制是 Java 中的一种重要的线程同步机制,它可以用来实现线程安全和提高程序的执行效率。
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
Java多线程与锁是Java并发编程中的核心概念,它们在构建高效、可扩展的并发应用程序中起着至关重要的作用。下面将详细讲解这两个主题。 首先,Java中的多线程是指程序执行时可以同时进行多个任务。这得益于操作系统...
为了在多线程中同步进度更新,我们可以利用synchronized关键字、wait()、notify()方法,或者使用Java并发库中的高级工具,如Semaphore、CyclicBarrier或CountDownLatch等。 一个简单的进度条实现可以采用共享变量...
本案例将深入探讨Java多线程中的关键知识点,包括线程同步、线程通信和线程阻塞。 线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
Java多线程、锁以及内存模型是Java编程中不可或缺的部分,尤其在面试中,这些问题的掌握程度往往被视为衡量开发者技术水平的重要标准。以下是一些关于Java并发编程的关键知识点: 1. **Synchronized原理**:...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
通过以上分析,我们可以看到,在Java中合理利用单线程或多线程以及`synchronized`关键字能够有效地提高程序的性能和响应能力,同时也需要注意其可能带来的复杂性和资源消耗问题。开发者应根据具体的应用场景和需求来...
死锁是多线程中的一个常见问题,当两个或更多线程相互等待对方释放资源而无法继续执行时,就会发生死锁。为避免死锁,我们需要遵循一些原则,如避免循环等待,或者使用死锁检测和预防算法。 Java还提供了一些线程池...
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...
《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...
Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关概念、线程类和接口的使用,以及线程的同步与互斥。 首先,我们需要理解进程与...