昨天复习了一下Java多线程,最近找工作时总是有人问到java concurrent包,所以就学习了一下,学习逻辑基本是"映射式",就是看原Java提供的多线程\同步在java concurrent中是怎么实现的,经比较感觉无区别,有原来java多线程基础理解concurrent的操作无压力,现在用concurrent同步类重写http://blog.csdn.net/zyplus/article/details/6672775的问题
代码如下:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
*@author zzf
*/
public class Test_15 {
public static void main(String[] args) throws InterruptedException{
Lock alock=new ReentrantLock();
Lock block=new ReentrantLock();
Lock clock=new ReentrantLock();
Condition acon=alock.newCondition();
Condition bcon=block.newCondition();
Condition ccon=clock.newCondition();
PrintChar p1 = new PrintChar("A",alock,clock,acon,ccon);
PrintChar p2 = new PrintChar("B",block,alock,bcon,acon);
PrintChar p3 = new PrintChar("C",clock,block,ccon,bcon);
Thread t1 = new Thread(p1);
Thread t2 = new Thread(p2);
Thread t3 = new Thread(p3);
t1.start();
Thread.sleep(50);
t2.start();
Thread.sleep(50);
t3.start();
Thread.sleep(50);
}
}
class PrintChar implements Runnable{
private String name;
private Lock self;
private Lock prev;
private Condition conSelf;
private Condition conPrev;
public PrintChar(String name,Lock self,Lock prev,Condition conSelf,Condition conPrev){
this.name=name;
this.self=self;
this.prev=prev;
this.conSelf=conSelf;
this.conPrev=conPrev;
}
@Override
public void run() {
int count=10;
while(count>0){
prev.lock();
self.lock();
try{
System.out.println("name:"+name);
count--;
conSelf.signal();
}catch(Exception e){
e.printStackTrace();
}finally{
self.unlock();
}
try{
if(count>0)
conPrev.await();
}catch(Exception e){
e.printStackTrace();
}finally{
prev.unlock();
}
}
}
}
分享到:
相关推荐
这个“java concurrent 精简源码”资源很可能会包含上述概念的实际应用示例,通过学习和分析这些代码,你可以深入理解Java并发编程的精髓,并能更好地应用于实际项目中。在研究时,建议结合Java官方文档和相关的书籍...
Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...
学习Java并发编程的过程中,参考高质量的技术资料是非常重要的。一些常用的参考资料包括官方文档、专业书籍和开源项目的源码分析等。 #### 十、习题 最后,通过习题来检验所学知识是巩固理解的好方法。以下是一些...
很多人学习完JavaSE/JavaEE之后想往更深入的技术进行探索,比如对大数据、分布式、高并发类的专题进行攻克时,立即遇到针对java.lang包中线程类的学习,但线程类的学习并不像JDBC一样简单,学习曲线陡峭,多弯路与...
如何启动:以win7系统为例,最好jdk8 1.打开cmd,cd到jdk的path,本机是:cd C:\Java\jdk6\bin ...java -cp D:\javaConcurrentAnimated.jar vgrazi.concurrent.samples.launcher.ConcurrentExampleLauncher
通过学习《并发编程在Java》中的设计原则和模式,开发者能够更好地理解和解决并发编程中遇到的挑战,从而编写出高效、健壮的多线程应用。这本书不仅适合初学者,也是经验丰富的Java开发者深入研究并发技术的重要参考...
Java平台提供了丰富的API支持并发编程,如`java.util.concurrent`包下的各种类和接口,这些工具可以帮助开发者更高效地管理多线程环境下的任务调度和数据共享问题。 ### Java并发编程基础 #### 1. 多线程基础 - **...
在JavaConcurrent库中,提供了丰富的工具类和接口来支持高效的并发编程。 首先,了解多线程的作用至关重要。多线程的主要目的是充分利用多核CPU的计算能力,使得程序能够并行执行不同的任务,提高整体效率。同时,...
《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...
2. **并发编程**:"java concurrent 探秘 - aurawing - 博客园.mht"很可能详细介绍了Java中的并发控制机制。Java提供了多种工具和接口,如线程(Thread)、ExecutorService、Future、Semaphore、CyclicBarrier、...
总的来说,《Java并发编程》一书涵盖了并发编程的基础知识和深入技术,为Java开发者提供了丰富的学习资源。无论是对于初学者还是有经验的开发者,这本书都是一本宝贵的参考书籍。通过阅读和实践书中的内容,读者可以...
例如,使用无锁数据结构或原子操作(`java.util.concurrent.atomic`包)。 3. **避免死锁、活锁和饥饿**:理解并预防这些并发问题至关重要。死锁发生在两个或多个线程相互等待对方释放资源导致僵局;活锁是线程不断...
本资源——`java_concurrent` 源码,提供了对Java并发包的深入学习材料以及实践示例,旨在帮助开发者深入理解并发编程背后的机制。 在`java.util.concurrent`包中,有几个重要的类和接口,它们构成了Java并发编程的...
Java提供了多种机制来保证线程安全,如`synchronized`关键字、`volatile`变量以及`java.util.concurrent`包中的高级并发工具类。 2. **死锁**:当两个或更多的线程在执行过程中,每个线程都在等待另一个线程释放...
通过本书,读者可以深入理解Java平台的线程模型,并学习如何更精确地利用这些特性来构建高效、可靠的并发程序。 #### 二、Java并发编程的核心概念 1. **内存模型**:Java内存模型定义了多线程环境中变量的可见性和...
Java的`concurrent`包是Java多线程编程的核心组件,它包含了一系列高效、线程安全的类和接口,使得开发者能够更容易地处理并发问题。这个包中的工具和类是Java平台对并行编程的强大支持,它极大地提升了程序在多...
"Concurrent_Java8:多线程和Java8学习"是一个专注于研究如何在Java 8环境中有效地利用并发特性的资源。这个压缩包可能包含了一系列的源代码示例,帮助开发者深入理解并发编程的关键概念。 首先,我们来讨论多线程。...
`java.util.concurrent`包是Java提供的一个强大的多线程工具库,其中包含了许多类和接口,如`CountDownLatch`和`CyclicBarrier`,它们为程序员提供了更高级别的同步和协调机制。这篇文档将详细解析这两个工具类的...
Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...