2012年4月10日

深入Java Thread.interrupt

摘要: 背景 中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。线程是死亡、还是等待新的任务或是继续运行 至下一步,就取决于这个程序。虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果。你最好还是牢记以下的几点告诫。 首先,忘掉Thread.stop方法。虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,这意味着,在未来的JAVA版本中,它将不复存在。 一些轻率的家伙可能被另一种方法Thread.interrupt所迷惑。尽管,其名称似乎在暗示着什么,然而,这种方法并不会中断一个正在运行的线程(待 ... 阅读全文

posted @ 2012-04-10 18:49 ゛白昼怎懂夜的黑ヽ 阅读(277) 评论(0) 推荐(0) 编辑

Java 理论与实践: 正确使用 Volatile 变量

摘要: Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次 只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用... 阅读全文

posted @ 2012-04-10 17:12 ゛白昼怎懂夜的黑ヽ 阅读(138) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(12):使用Synchronized块同步变量

摘要: 本文是Java多线程初学教程中的最后一部分,讲解如何使用Synchronized块同步变量。我们可以通过synchronized块来同步特定的静态或非静态方法。原文链接我们可以通过synchronized块来同步特定的静态或非静态方法。要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传入synchronized块。下面的代码演示了如何同步特定的类方法: 001package mythread; 002 003publicclass SyncThread extendsThread 004{ 005priva... 阅读全文

posted @ 2012-04-10 16:58 ゛白昼怎懂夜的黑ヽ 阅读(204) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(11):使用Synchronized块同步方法

摘要: 在使用Java多线程中会需要使用Synchronized块同步方法。我们不仅可以通过synchronized块来同步一个对象变量。也可以使用synchronized块来同步类中的静态方法和非静态方法。原文链接synchronized关键字有两种用法。第一种就是在《使用Synchronized关键字同步类方法》一文中所介绍的直接用在方法的定义中。另外一种就是synchronized块。我们不仅可以通过synchronized块来同步一个对象变量。也可以使用synchronized块来同步类中的静态方法和非静态方法。synchronized块的语法如下:publicvoidmethod() {.. 阅读全文

posted @ 2012-04-10 16:55 ゛白昼怎懂夜的黑ヽ 阅读(155) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(10):使用Synchronized关键字同步类方法

摘要: 本文介绍使用Synchronized关键字同步类方法。要达成Java多线程的run方法同步,需要在void和public之间加上synchronized关键字。原文链接要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicsynchronizedvoidrun() { } 从上面的代码可以看出,只要在void和public之间加上s 阅读全文

posted @ 2012-04-10 16:51 ゛白昼怎懂夜的黑ヽ 阅读(188) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(9):为什么要进行数据同步

摘要: 本文介绍学习Java多线程中需要学习的数据同步。原文链接Java中的变量分为两类:局部变量和类变量。局部变量是指在方法内定义的变量,如在run方法中定义的变量。对于这些变量来说,并不存在线程之间共享的问题。因此,它们不需要进行数据同步。类变量是在类中定义的变量,作用域是整个类。这类变量可以被多个线程共享。因此,我们需要对这类变量进行数据同步。数据同步就是指在同一时间,只能由一个线程来访问被同步的类变量,当前线程访问完这些变量后,其他线程才能继续访问。这里说的访问是指有写操作的访问,如果所有访问类变量的线程都是读操作,一般是不需要数据同步的。那么如果不对共享的类变量进行数据同步,会发生什么情.. 阅读全文

posted @ 2012-04-10 16:41 ゛白昼怎懂夜的黑ヽ 阅读(143) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(8):从线程返回数据的两种方法

摘要: 本文介绍学习Java多线程中需要学习的从线程返回数据的两种方法。从线程中返回数据和向线程传递数据类似。也可以通过类成员以及回调函数来返回数据。原文链接 从线程中返回数据和向线程传递数据类似。也可以通过类成员以及回调函数来返回数据。但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪。一、通过类变量和方法返回数据使用这种方法返回数据需要在调用start方法后才能通过类变量或方法得到数据。packagemythread; publicclassMyThreadextendsThread { private Stringvalue1; privateStringvalue... 阅读全文

posted @ 2012-04-10 16:22 ゛白昼怎懂夜的黑ヽ 阅读(238) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(7):向线程传递数据的三种方法

摘要: 本文讲述在学习Java多线程中需要学习的向线程传递数据的三种方法。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。原文链接在传统的同步开发 模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和 返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法。.. 阅读全文

posted @ 2012-04-10 16:18 ゛白昼怎懂夜的黑ヽ 阅读(203) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(6):慎重使用volatile关键字

摘要: 学习Java多线程中会遇到使用volatile关键字的情况。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。使用它有一定的限制。原文链接volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、 boolean等数据类型。如果这些简单数据类型声明为volatile,对它们的操作就会变成原子级别的。但这有一定的限制。例如,下面的例子中的n就 不是原子级别的:packagemythread; publicclassJoinThreadextendsThread { publ... 阅读全文

posted @ 2012-04-10 16:16 ゛白昼怎懂夜的黑ヽ 阅读(190) 评论(0) 推荐(0) 编辑

Java多线程初学者指南(5):join方法的使用

摘要: 本文为Java多线程初学者系列的第一篇,简单介绍了什么是Java的线程及多线程的好处。由于Java是纯面向对象语言,因此,Java的线程模型也是面向对象的。原文链接 在上面的例子中多次使用到了Thread类的join方法。我想大家可能已经猜出来join方法的功能是什么了。对,join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法... 阅读全文

posted @ 2012-04-10 16:12 ゛白昼怎懂夜的黑ヽ 阅读(167) 评论(0) 推荐(1) 编辑

导航