Java线程:大总结

Java线程:大总结   Java线程是Java语言中一个非常重要的部分,Java5之前,多线程的语言支持还是比较弱的,内容也较少,写一个复杂的多线程程序是相当有挑战性的。   在Java5以后,Java对多线程做了很多扩展,扩展部分称之为并发包。这部分内容大大增强了Java多线程编程的能力,通过使用Java5线程新特征的API,可以很容易的做出复杂的多线程程序。与其他

原创 推荐 点赞33 阅读10000+ 收藏10 评论41 2009-11-05

Java线程:新特征-障碍器

Java线程:新特征-障碍器   Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。   障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子:   import java.util.concurrent.Broke

原创 点赞9 阅读10000+ 收藏0 评论4 2009-11-05

Java线程:新特征-原子量

Java线程:新特征-原子量   所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。   为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。 Java5之后,专门提供了用来进行单变量多线程并发安全访问的工具包ja

原创 点赞11 阅读10000+ 收藏0 评论9 2009-11-05

Java线程:新特征-条件变量

Java线程:新特征-条件变量   条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。   这里的条件和普通意义上的条件表达式有着天壤之别。   条件变量都实现了java.util.concurrent.locks.Con

原创 推荐 点赞7 阅读10000+ 收藏0 评论22 2009-11-05

Java线程:新特征-阻塞栈

Java线程:新特征-阻塞栈   对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头。   这里要特别说明一点的是,阻塞栈是Java6的新特征。、   Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多,具体可以查看J

原创 点赞3 阅读10000+ 收藏0 评论4 2009-11-05

Java线程:新特征-阻塞队列

Java线程:新特征-阻塞队列   阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止。   有了这样的功能,就

原创 点赞1 阅读10000+ 收藏0 评论0 2009-11-05

Java线程:新特征-信号量

Java线程:新特征-信号量   Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等,这里总是在强调“数目”二字,但不能指出来有哪些在等待,哪些资源可用。   因此,本人认为,这个信号量类如果能返回数目,还能知道哪些对象在等

原创 点赞4 阅读10000+ 收藏0 评论2 2009-11-05

Java线程:新特征-锁(下)

Java线程:新特征-锁(下)   在上文中提到了Lock接口以及对象,使用它,很优雅的控制了竞争资源的安全访问,但是这种锁不区分读写,称这种锁为普通锁。为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,在一定程度上提高了程序的执行效率。   Java中读写锁有个接口java.util.concurrent.locks.ReadWr

原创 点赞4 阅读10000+ 收藏0 评论0 2009-11-05

Java线程:新特征-锁(上)

Java线程:新特征-锁(上)   在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口Condition、Lock、ReadWriteLock。   Condition Condition 将 O

原创 点赞4 阅读10000+ 收藏0 评论13 2009-11-04

Java线程:新特征-有返回值的线程

Java线程:新特征-有返回值的线程   在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。   现在Java终于有可返回值的任务(也可以叫做线程)了。   可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。   执行Callabl

原创 点赞3 阅读10000+ 收藏1 评论6 2009-11-04

Java线程:新特征-线程池

Java线程:新特征-线程池   Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。   有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多

原创 点赞8 阅读10000+ 收藏0 评论6 2009-11-04

Java线程:volatile关键字

Java线程:volatile关键字   Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。   谈及到volatile关键字,不得不提的一篇文章是:《Java 理论与实践: 正确使用

原创 点赞2 阅读10000+ 收藏0 评论7 2009-11-04

Java线程:并发协作-死锁

Java线程:并发协作-死锁   线程发生死锁可能性很小,即使看似可能发生死锁的代码,在运行时发生死锁的可能性也是小之又小。   发生死锁的原因一般是两个对象的锁相互等待造成的。   在《Java线程:线程的同步与锁》一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出一个完整的例子。   /** * Java线程:并

原创 点赞1 阅读10000+ 收藏0 评论8 2009-11-04

Java线程:并发协作-生产者消费者模型

Java线程:并发协作-生产者消费者模型   对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。   实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。 对于此模型,应该明确一下几点: 1、生产者仅仅在仓储未满时候生产,仓满则停止

原创 点赞10 阅读10000+ 收藏2 评论17 2009-11-04

Java线程:线程的同步-同步块

Java线程:线程的同步-同步块   对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。   追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。   在上个例子的基础上,对oper方法做了改动,由同步方法改

原创 推荐 点赞5 阅读10000+ 收藏0 评论7 2009-11-04

Java线程:线程的同步-同步方法

Java线程:线程的同步-同步方法   线程的同步是保证多线程安全访问竞争资源的一种手段。 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题?   在本文之前,请参阅《Java线程:线程的同步与锁》,本文是在此基础上所写

原创 点赞8 阅读10000+ 收藏2 评论5 2009-11-04

Java线程:线程的调度-守护线程

Java线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。   守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。 &

原创 点赞17 阅读10000+ 收藏0 评论9 2009-11-04

Java线程:线程的调度-合并

Java线程:线程的调度-合并   线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。   join为非静态方法,定义如下: void join()        等待该线程终止。 &n

原创 点赞13 阅读10000+ 收藏0 评论23 2009-11-04

Java线程:线程的调度-让步

Java线程:线程的调度-让步   线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。   线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。   /** * Java线程:线程的调度-让步 * * @author leiz

原创 点赞7 阅读10000+ 收藏0 评论8 2009-11-04

Java线程:线程的调度-优先级

Java线程:线程的调度-优先级   与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。   线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。   在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。 &nb

原创 点赞2 阅读10000+ 收藏0 评论2 2009-11-04

Java线程:线程的调度-休眠

Java线程:线程的调度-休眠   Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。   这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。   线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休

原创 推荐 点赞2 阅读10000+ 收藏0 评论6 2009-11-04

JDK工具 appletviewer命令详解

JDK工具 appletviewer命令详解   非SCJP考试内容,很好玩。可以用来发开发Applet程序。 如果你浏览器没有安装Java插件,那只能依靠这个工具来浏览Applet了。   一、查看命令   直接在控制台输入appletviewer即可。     二、实践   JDK安装目录下的demo/appl

原创 点赞1 阅读10000+ 收藏0 评论0 2008-11-13

JDK工具 jar命令详解

JDK工具 java命令详解   SCJP必考内容,很有用处,即使你现在用的是IDE。   一、查看用法   C:\myproject>jar用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...选项:    -c  创建新的存档 &n

原创 点赞0 阅读2579 收藏0 评论0 2008-11-12

JDK工具 java命令详解

JDK工具 java命令详解   java命令也是SCJP必考内容,很有用处,即使你现在用的是IDE。   一、查看用法   C:\>java -help Usage: java [-options] class [args...]          &nb

原创 推荐 点赞0 阅读7780 收藏0 评论1 2008-11-12

JDK工具 javac命令详解

JDK工具 javac命令详解   SCJP必考的内容,理解了这个对掌握IDE开发工具是很有帮助的。也不至于离开了IDE就不能写代码了。   这块内容很简单,但题不容易能做全对。   一、查看命令   C:\myproject>javac -help 用法:javac <选项> <源文件> 其中,可能的选项包

原创 推荐 点赞1 阅读10000+ 收藏0 评论4 2008-11-12

javadoc 应用详解

javadoc 应用详解   javadoc是生成一个java api文档生成工具。存在于jdk安装目录下的bin目录中。   javadoc在命令行使用还是比较复杂的,在eclipse、idea等IDE中却比较方便,在命令行使用的麻烦的原因是众多的参数。   但是IDE傻瓜型的操作在有些时候还完成不了想要的任务。这时候,就需要懂得一些参数命令的用法了。

原创 点赞0 阅读10000+ 收藏0 评论1 2008-09-18

Java线程:线程的交互

Java线程:线程的交互   SCJP5学习笔记   线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。   一、线程交互的基础知识   SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习:    void notify()

原创 点赞19 阅读10000+ 收藏0 评论40 2008-09-13

Java线程:线程的同步与锁

Java线程:线程的同步与锁       一、同步问题提出   线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。   public class Foo {     p

原创 点赞46 阅读10000+ 收藏5 评论30 2008-09-13

Java线程:线程状态的转换

Java线程:线程状态的转换   SCJP5学习笔记   一、线程状态   线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下:   1、新状态:线程对象已经创建,还没有在其上调用start()方法。   2、可运行状态:当线程有资格运行,但调度程序还没

原创 推荐 点赞40 阅读10000+ 收藏3 评论15 2008-09-13

Java线程:线程栈模型与线程的变量

Java线程:线程栈模型与线程的变量   SCJP5学习笔记   要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。   下面通过一个示例性的代码说明线程(调用)

原创 点赞25 阅读10000+ 收藏1 评论17 2008-09-13
  • 1
  • 2
写文章