`
yesjavame
  • 浏览: 687220 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java并发编程基础知识片段(一)

阅读更多
Java 5并发包的加入,给Java的并发程序的开发带来了很多的好处,在此列举一些并发编程中应该掌握的一些基础知识片断,这些片断基本都是由一些问题组成,在片段中没有直接写出答案,由于可用来解决这些片段的方法还是很多的,因此只是提到了解决问题可选方案的关键字,如果有需要进一步了解的话,基本上google一下应该就能查出来了,不过就像之前有朋友说的,如果不是经常用的话,其实就算现在知道了也是会忘记的,这很正常,:),不过我更认为那是因为知其然而不知其所以然造成的,很多东西如果知道原理的话,基本上还是可以记得很长一段时间的。
片断一
在main中启动两个线程,例如:
Thread a=new Thread(){
public void run(){
System.out.println("Call A");
try{
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
}
};
Thread b=new Thread(){
public void run(){
try{
Thread.sleep(500);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("Call B");
}
};
a.start();
b.start();
System.out.println("execute here");
在这样的方式下,执行时会出现什么样的效果;
怎么样才能保证字符串的打印顺序是:"Call B"-->"Call A"-->"execute here"呢?(提示:wait/notify、Semphore、Lock等)
在做到了上面打印顺序控制后,怎么样才能做到如果线程b执行了100毫秒还没执行完的话则直接继续线程a的执行呢?(提示:ExecutorServices、Future)
片段二
也是个控制顺序的问题,假设有如下一段代码:
for(int i=0;i<10;i++){
Thread thread=new Thread(){
public void run(){
...
}
};
thread.setName("Thread-"+i);
thread.start();
}
System.out.println("All Executed");
需要做到所有线程同时运行,而不是按照for的顺序一个一个启动,并且要求All Executed需要在所有线程都执行完毕后才打印,有什么办法做到呢?(提示:CountDownLatch等)
片段三
Map<String,Object> datas=new ConcurrentHashMap<String,Object>();
public Object get(String keyName){
Object data=null;
if(!datas.containsKey(keyName)){
data=createData(keyName);
datas.put(keyName,data);
}
else{
data=datas.get(keyName;)
}
return data;
}
上面这段代码在并发时会出什么问题呢,为什么?
如果有问题的话,应该怎么去解决呢?(提示:Synchronized、Lock、FutureTask等)
片段四
ThreadPoolExecutor executor=new ThreadPoolExecutor(10,100,60L,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(20),new ThreadPoolExecutor.AbortPolicy());
一个这样的线程池,当并发请求数为15时会是怎么个状况?(池的使用状况,例如活动线程数、队列中的数等)
当并发请求数为100的时候是什么状况?
当并发请求数为200的时候是什么状况?
当30秒内不再有请求时会怎么样?
当2分钟内没有请求时会怎么样?
如果换成以下方式初始化池又会怎么样呢:
ThreadPoolExecutor executor=new ThreadPoolExecutor(10,150,20L,TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),new ThreadPoolExecutor.AbortPolicy());
片段五
怎么查看jvm中线程的执行状况?
ThreadFactory有什么用?
如果要捕捉线程中抛出的异常,可以怎么做呢?
如果TimerTask抛出运行时异常会不会影响到同一个Timer中其他的TimerTask的执行呢?
片段六
常见的一个例子:
private int count;
public synchronized int getNext(){
return count++;
}
在JDK5有什么别的方法来进行实现吗?
像JDK5中的AtomicInteger的incrementAndGet是怎么实现的呢?
如果这个count要按线程来独立管理,即每个线程有自己的一个count,要怎么做呢?

暂时就列这些了,后面再继续,:)。
分享到:
评论

相关推荐

    java并发编程基础PPT以及DEMO示例&操作系统概述PPT

    在本资源中,我们有两个主要的学习材料:一个关于“Java并发编程基础”的PPT和一个包含DEMO示例,另一个是“操作系统概述”的PPT。这些资料对于理解Java多线程编程以及操作系统的基础原理至关重要。 首先,让我们...

    龙果学院java并发编程完整视频

    ### Java并发编程基础知识 1. **线程**: Java中的线程是程序执行的基本单位,每个线程都有自己的堆栈空间和执行上下文。 - 创建线程的方法有两种:继承`Thread`类或实现`Runnable`接口。 - `Thread`类提供了多种...

    《Java并发编程高阶技术-高性能并发框架源码解析与实战》学习.zip

    总之,《Java并发编程高阶技术-高性能并发框架源码解析与实战》这本书涵盖了Java并发编程的诸多核心知识点,适合有一定Java基础并希望深入研究并发编程的开发者阅读。通过学习,你不仅可以掌握并发编程的基本概念和...

    Java并发编程之美(这个写的不错)1

    Java并发编程之美(基础知识) Java并发编程是一个门槛较高的知识点,但是它在实际开发中非常重要。并发编程可以提高程序的效率和性能,但同时也会引入一些复杂的问题,如线程安全问题。因此,学习并发编程的基础...

    java并发测试

    首先,我们需要理解Java并发的基础。Java提供了一系列的并发工具,如线程(Thread)、ExecutorService、Semaphore、CyclicBarrier、CountDownLatch等,这些工具可以帮助开发者创建和管理线程,以及协调线程间的协作...

    JAVA服务端研发知识图谱_源码.rar

    9. **并发编程**:Java并发工具类如ExecutorService、Semaphore、CountDownLatch等,可以帮助开发者高效地管理并发任务。 10. **Web服务器和应用服务器**:Tomcat、Jetty等是常见的Java应用服务器,它们处理HTTP...

    使用Java实现高并发推送服务.pdf

    Java作为一种广泛使用的编程语言,其在实现高并发推送服务方面具有明显的优势。本文档探讨了使用Java实现高并发推送服务的技术和方法,重点分析了如何通过Java NIO(New I/O)技术、消息队列技术、缓存技术等多种...

    Java_9_Concurrency_Cookbook_-_Second_Edition.pdf

    以下是对并发编程基础知识的一些介绍: - **并发**(Concurrency):是指一个系统或计算过程中同时处理多个任务的能力。在多核处理器环境下,通过合理地组织和调度任务,可以让程序看起来同时执行多个任务,从而...

    java 入门资料 java基础知识学习

    本篇文章将围绕“Java入门资料”这一主题,深入探讨Java的基础知识,并结合给定的文件内容进行详细的阐述。 #### Java的历史背景和发展 1. **起源与命名**:最初,Java项目名为“Oak”,但由于这个名字已经被注册...

    Java语言程序设计基础篇第六版英文课后习题答案

    10. 并发编程 Java提供了一系列工具和API用于编写多线程和并发程序。其中包括Thread类、Runnable接口以及并发工具类(如ExecutorService、Semaphore、CyclicBarrier等)。 以上列出的是Java程序设计的一些基础知识...

    Java网络编程实验

    Java网络编程是Java开发中的重要领域,涉及到网络数据传输、多线程、并发处理等多个核心概念。本实验系列旨在通过六个具体的实验,帮助学习者深入理解并熟练掌握这些关键技能。 实验一:基本I/O类的使用 在这个实验...

    java基础教程

    从给定的文件片段来看,这是一篇关于Java基础教程的文章,尽管原文中包含了一些乱码和非标准字符,但可以推断出文章试图涵盖Java编程语言的基础概念、语法、环境搭建以及一些高级主题。下面将对这些知识点进行详细的...

    java web高级编程--英文高清版

    通过以上知识点的总结,可以预见这本书将为读者提供全面且深入的Java Web开发指南,不仅覆盖了基础知识,还包括了许多高级话题和技术栈。无论是对于初学者还是有一定经验的开发者来说,《Professional Java® for ...

    Java灵感编程范例源代码41-60

    这些文件名为"Java灵感编程范例源代码41-60"的压缩包,是针对Java编程语言的一系列示例代码,涵盖了从第41个到第60个的编程范例。这些范例通常旨在教授...同时,这也是一个很好的自我学习和复习Java编程知识的方式。

    Java基础知识笔试题及答案.docx

    Java是一种广泛使用的面向对象的编程语言,其基础知识包括但不限于面向对象编程、数据类型、控制流、异常处理和...通过这些知识点的学习和实践,Java初学者可以逐步掌握编程基础,为进一步学习高级主题打下坚实的基础。

    Java Socket 编程

    通过学习这个课件,初学者可以了解Java Socket编程的基础知识,逐步掌握网络通信的核心技能。对于已经有一定经验的开发者,这个课件也可以作为一个快速参考,回顾关键概念和技巧。总之,Java Socket编程是构建分布式...

    java基础程序模板打包

    Java基础程序模板打包是针对Java初学者的一份宝贵资源,它包含了进行基本Java编程所需的各类模板,可以帮助新手快速上手并理解编程结构。这个压缩包中的"javaprogram"文件夹很可能包含了各种示例代码、类库和项目...

Global site tag (gtag.js) - Google Analytics