- 浏览: 16828 次
- 来自: ...
最新评论
文章列表
本文为转载,http://student.csdn.net/space.php?uid=44933&do=blog&id=11970
要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下:
<!--<br />
<br />
Code highlighting produced by Actipro Cod ...
- 2009-10-16 17:50
- 浏览 685
- 评论(0)
也许有人会问,如果只有n++,会产生“脏数据”吗?答案是肯定的。那么n++只是一条语句,又如何在执行过程中将CPU交给其他的线程呢?其实这只是表面现象,n++在被Java编译器编译成中间语言(也叫做字节码)后,并不是一条语言。让我们看看下面的Java代码将会被编译成什么样的Java中间语言。
Java源代码
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.c ...
- 2009-10-16 17:47
- 浏览 768
- 评论(0)
本文为转载,http://student.csdn.net/space.php?uid=44933&do=blog&id=11632
Java中的变量分为两类:局部变量和类变量。局部变量是指在方法内定义的变量,如在run方法中定义的变量。对于这些变量来说,并不存在线程之间共享的问题。因此,它们不需要进行数据同步。类变量是在类中定义的变量,作用域是整个类。这类变量可以被多个线程共享。因此,我们需要对这类变量进行数据同步。
数据同步就是指在同一时间,只能由一个线程来访问被同步的类变量,当前线程访问完这些变量后,其他线程才能继续访问。这里说的访问是指有写操作的访问,如果所有 ...
- 2009-10-16 17:45
- 浏览 735
- 评论(0)
本文为转载,http://student.csdn.net/space.php?uid=44933&do=blog&id=11460
从线程中返回数据和向线程传递数据类似。也可以通过类成员以及回调函数来返回数据。但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪。
一、通过类变量和方法返回数据
使用这种方法返回数据需要在调用start方法后才能通过类变量或方法得到数据。让我们先来看看例程2-13会得到什么结果。
<!--<br />
<br />
Code highlighting produce ...
- 2009-10-16 17:35
- 浏览 835
- 评论(0)
本文为转载,http://student.csdn.net/space.php?uid=44933&do=blog&id=10885
在传统的同步开发 模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和 返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法。
欲先取之,必先予之。 ...
- 2009-10-16 17:20
- 浏览 1234
- 评论(0)
Java多线程初学者指南(6):慎重使用volatile关键字 本文转载,http://student.csdn.net/space.php?uid=44933&do=blog&id=10669 volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、 boolean等数据类型。如果这些简单数据类型声明为volatile,对它们的操作就会变成原子级别的。但这有一定的限制。例如,下面的例子中的n就 不是原子级别的: package mythread; public class JoinThread ...
- 2009-10-16 17:18
- 浏览 775
- 评论(0)