`
w7849516230
  • 浏览: 20293 次
文章分类
社区版块
存档分类
最新评论

java编程思想阅读笔记(十一)并发

 
阅读更多

继续把笔记整理着。并发多线程的东西说起来就很多了,如果说复杂,要是线程之间的交集较多的话(交互啊,共享资源等等),确实很棘手,而且往往测试还是个大问题,再扯上性能稳定之类云云就。。。;如果说处理的逻辑清晰简单,那么它也挺简单的,似乎只要实现Runable接口,并通过Thread类或者Executor接口(Executor、ExecutorService)管理就好了;个人的感觉首先把逻辑、状态转换、交互理清了,后续会少很多麻烦的。


1.基本线程机制
(1)首先谈Runnable接口,可以看到其本身只有一个run方法,在类的run方法中开启另一个线程。而为了想对创建的线程增加些管理的功能,可以使用Thread类(实现了Runnable,因此可以继承Thread而覆盖run方法)。看看几个方法:
start(),使该线程开始执行,但是不能多次启动
sleep(long millis),静态方法,是线程休眠指定的毫秒数
getPriority() ,setPriority(int newPriority) 获得和设定线程的优先级,当然只有MAX_PRIORITY ,MIN_PRIORITY,NORM_PRIORITY三种
setDaemon(boolean on),使线程变为后台(守护)线程
join(),等待线程终止
还有判断是否中断等等,当然可以查看手册,但是发现这种多线程的方法是没有返回值的,可以有异常;
(2)Callable<V>接口,可以给你带回想要的返回值泛型V,但是必须使用ExecutorService.submit( );这里有个疑问是为什么Runnable接口是在java.lang的包中的,而Callable<V>在java.util.concurrent包中。
(3)在java.util.concurrent包中的ExecutorService,实现了Executor接口,想想看看线程池

ExecutorService exec = Executors.newCachedThreadPool() 或者FixedThreadPool()


2.共享受限资源

对于多个线程或进程共享受限的资源,可以通过加锁的方式,lock(检查锁是否可用,否阻塞;是获取锁执行,释放锁),trylock(尝试获取锁,可以获得则执行,否则直接返回);另一种方式就是给需要共享的代码加上Synchronized关键字,类似于锁定;从书中后面的从性能角度分析的,显示地使用lock更稳定,而Synchronized在较少而且简单的情况下才好些(那为什么要搞出这么一个关键字?为了更抽象和简单?因为lock和trylock在c中是很常用的方式,至于什么互斥量、信号量的我就不写了,因为和C中的似乎没有区别)。而对于受限资源的访问老是有个死锁的问题,只要避免那四个条件同时发生:资源的互斥访问(资源至少有一个是非共享的),有等待,访问资源构成循环,而且互相之间不能抢占;说的不严谨,其实意思就是当多个线程或进程访问一些资源时,如果这些资源存在至少一个是非共享的,那么当一个线程拥有一个资源等待另一个非共享的资源而阻塞时,另一个线程拥有这个非共享资源而等待被其它线程使用的非共享资源(或者等待其它想要这个非共享资源的线程运行完毕),而且不能抢占资源,造成了相互等待而不能运行的结局。


3.简单的提到一下新类库中的构件。CountDownLatch:同步一个或多个任务,强制它们等待由其它任务执行的一组操作完成(而且是只触发一次事件),CyclicBarrier:多个任务一致向前执行。
4.线程之间的协作,其实上面的锁啊,信号量啊,新构件啊就是一些方式;然后呢,还有些wait——notify notifyAll()
interrupt()——Thread.interrupted()的方法;这里也有C中经常用到的signal()的。
我这里只是把一些看到的,可能用的到的概念之类的提到,但是具体的使用只有在真正用到的时候才能发挥它的力量。我自己是感觉用的不多的话,多做练习似乎只能加深些印象,时间长了不用还是会忘;而对于真正的协作,性能,稳定的说法就只能说说了。
分享到:
评论

相关推荐

    java编程思想读书笔记

    ### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...

    Java编程思想学习笔记

    在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...

    java编程思想读书笔记.rar

    《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地介绍了Java语言...通过阅读《Java编程思想》,读者可以全面理解Java语言,并具备实际开发能力。配合书中的例子和练习,能更好地巩固知识,提升编程技能。

    Java编程思想重点笔记(Java开发必看).pdf

    以上只是Java编程思想笔记中的冰山一角,深入学习还包括网络编程、数据库连接、JVM内存模型、垃圾回收机制、并发编程高级话题、Spring框架等内容。这些知识点构成了Java开发者必备的基础知识体系,通过不断学习和...

    Java编程思想笔记(全)

    ### Java编程思想笔记知识点概述 #### 第 1 章 对象导论 在这一章节中,主要介绍了Java中的基本概念——对象。对象是面向对象编程的核心,它封装了数据和行为。本章首先解释了对象的概念,接着讨论了如何创建对象...

    Java高并发笔记.pdf

    ### Java高并发核心知识点解析 #### 一、同步与异步 **同步(Synchronous)** ...通过对这些概念的学习,开发者可以更好地掌握Java并发编程的核心思想和技术要点,进而提高系统的整体性能和稳定性。

    达内Java_笔记整理.rar_Java 达内笔记_Java笔记_java 笔记_笔记_达内

    这份名为“达内Java_笔记整理.rar”的压缩文件包含了丰富的Java学习资料,主要目标是帮助学习者节省在寻找合适学习资源上的时间,提高...通过系统的阅读和实践,可以有效地提高Java编程技能,为职业发展打下坚实基础。

    中文版Thinking in Java 4th编程思想(笔记)

    《中文版Thinking in Java 4th编程思想》是学习Java编程的重要参考资料,它深入浅出地介绍了面向对象编程的核心概念。下面将详细解读其中的主要知识点。 1. **对象导论** - **万物皆对象**:Java编程的核心是对象...

    王者归来之Thinking in java读书笔记

    《王者归来之经典-Java编程思想读书笔记》会介绍如何有效地使用异常处理机制,防止程序因未预期的错误而崩溃。 函数和方法是代码复用的关键。Java支持方法重载和重写,这使得代码更加灵活且易于维护。书中会详细...

    非常好的java笔记适合初学者

    总的来说,这份"非常好的java笔记"是初学者学习Java编程的理想教材,它将引导读者逐步掌握编程基础,理解面向对象编程思想,以及熟悉Java特性和库的使用。通过系统的阅读和实践,初学者能够建立起坚实的Java编程基础...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及...通过详细阅读和反复实践,初学者可以逐步提高编程技能,理解Java编程的核心思想,从而在软件开发的世界里游刃有余。

    达内JAVA培训综合笔记

    多线程是Java编程中一个重要的高级特性,笔记中详细介绍了Thread线程类及多线程的使用,以及线程池的概念,这些都对于编写高效、可维护的并发程序至关重要。同时,还涉及了Socket网络编程和双缓冲队列,这些是构建...

    Java JDK 8学习笔记 带完整书签(不是页码书签哦)

    对于那些想要提升Java编程技能的开发者来说,这本书是不可多得的参考资料。 总的来说,《Java JDK 8学习笔记》是一本全面覆盖Java 8新特性的指南,它通过深入浅出的讲解和丰富的实例,帮助读者掌握Java 8的核心概念...

    JAVA学习笔记

    JAVA学习笔记是一个全面涵盖JAVA编程基础到进阶的资源集合,特别适合初学者掌握JAVA语言和项目开发技术。笔记内容包括了几个核心领域,如编程思想、多线程设计模式、网络编程,以及JAVA的新输入/输出(NIO)系统。 ...

    Java学习笔记适合java初学者使用

    【Java学习笔记】是针对Java初学者的一套全面的学习资源,旨在帮助新手快速掌握Java编程基础知识。这份资料包含了丰富的学习内容,如Java语言的核心概念、语法特性、面向对象编程思想等,同时也融入了实践性的练习,...

    B站java狂神说笔记

    这份笔记的PDF版本详细讲解了Java的基础概念、进阶特性和实战应用,旨在帮助读者全面理解和掌握Java编程。 一、Java基础 Java基础部分包括了Java环境的搭建、基本语法、数据类型、控制结构(如if语句、switch语句、...

    瑜琅java学习笔记

    ### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: ...希望这份笔记能够帮助更多的人更好地理解和掌握Java编程。

    java学习笔记JDK6.0课件和代码

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。JDK(Java Development Kit)是Java...随着Java技术的不断发展,虽然JDK 6.0已经过时,但它仍然是初学者理解和掌握Java编程思想的宝贵资源。

    java黑马笔记.rar

    Java编程语言是当今软件开发领域中的重要工具,尤其在...这些知识点构成了Java编程的基础,也是"java黑马笔记"可能涵盖的内容。学习Java,不仅要理解语法,更要掌握其核心思想和最佳实践,以便在实际项目中灵活运用。

Global site tag (gtag.js) - Google Analytics