2013年7月24日
摘要: Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。public volatile boolean exit = false;在定义exit时,使用了一个Java关键字volatile,这个关键字的目的是使exit同步,也就是说在同一时刻只能由一个线程来修改exit的值.volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。如果这些简单数据类型声明为volatile,对它们的操作就会变成原 阅读全文
posted @ 2013-07-24 21:28 Ruthless 阅读(2595) 评论(3) 推荐(1) 编辑
摘要: 对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。 追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。 在上个例子的基础上,对oper方法做了改动,由同步方法改为同步代码块模式,程序的执行逻辑并没有问题。package cn.thread;/** * 线程同步方法 * * @author 林计钦 * @version 1.0 2013-7-24 上午10:12:47 */public class ThreadSynchronizedCode . 阅读全文
posted @ 2013-07-24 10:37 Ruthless 阅读(4565) 评论(0) 推荐(0) 编辑
摘要: 线程的同步是保证多线程安全访问竞争资源的一种手段。线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题? 在本文之前,请参阅《Java多线程-线程的同步与锁》,本文是在此基础上所写的。 对于同步,在具体的Java代码中需要完成一下两个操作:把竞争访问的资源标识为private;同步哪些修改变量的代码,使用synchronized关键字同步方法或代码。当然这不是唯一控制并发安全的途径。 synchronized关键字使用说明synchronized只能 阅读全文
posted @ 2013-07-24 10:27 Ruthless 阅读(2257) 评论(0) 推荐(0) 编辑
摘要: 守护线程与普通线程写法上基本没啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。setDaemon方法的详细说明:public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java虚拟机退出。 该方法必须在启动线程前调用。 该方法首先调用该线程的checkA... 阅读全文
posted @ 2013-07-24 10:05 Ruthless 阅读(7127) 评论(0) 推荐(0) 编辑
摘要: 线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。join为非静态方法,定义如下:void join(): 等待该线程终止。 void join(long millis): 等待该线程终止的时间最长为 millis 毫秒。 void join(long millis, int nanos): 等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。package cn.thread;/** * 线程的调度(合并) * * @author 林计钦 * @version 1.0 2... 阅读全文
posted @ 2013-07-24 09:53 Ruthless 阅读(5908) 评论(1) 推荐(0) 编辑
摘要: 线程的让步含义就是使当前运行着线程让出CPU资源,但是扔给谁不知道,仅仅是让出,线程状态回到可运行状态。 线程的让步使用Thread.yield()方法,yield()为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。package cn.thread;/** * 线程的调度(让步) * * @author 林计钦 * @version 1.0 2013-7-24 上午09:42:41 */public class ThreadYield { public static void main(String[] args) { ThreadYield thread... 阅读全文
posted @ 2013-07-24 09:46 Ruthless 阅读(2143) 评论(1) 推荐(0) 编辑
摘要: 与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。 在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。package cn.thread;/** * 线程的调度(优先级) * * @author 林计钦 * @version 1.0 2013-7-24 上午09:30:42 */public class ThreadPriority { public static void mai... 阅读全文
posted @ 2013-07-24 09:38 Ruthless 阅读(3338) 评论(0) 推荐(0) 编辑
摘要: Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。线程休眠的方法是Thread.sleep(long millis)和Thread.sleep(long millis, int nanos),均为静态方法,那调用sleep休眠的哪个线程呢?简单说,哪个线程调用sleep,就休眠哪个线程。 阅读全文
posted @ 2013-07-24 09:20 Ruthless 阅读(7881) 评论(0) 推荐(0) 编辑