上篇通过一个简单的例子说明了线程安全与不安全,在例子中不安全的情况下输出的结果恰好是逐个递增的(其实是巧合,多运行几次,会产生不同的输出结果),为什么会产生这样的结果呢,因为建立的Count对象是线程共享的,一个线程改变了其成员变量num值,下一个线程正巧读到了修改后的num,所以会递增输出。
要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是...
分类:
编程语言 时间:
2014-05-15 12:15:49
阅读次数:
355
当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说StringBuilder中,有这么一句,“将StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。
”,那么下面手动创建一个线程不安全的类,然后在多线程中使用这个类,看看有什么效果。
Count.java:
...
分类:
编程语言 时间:
2014-05-14 20:42:25
阅读次数:
398
一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
线程是指进程中的一个执行流程,一个进程中可以运...
分类:
编程语言 时间:
2014-05-12 14:41:33
阅读次数:
362
package com.test; import java.util.Date; /** *
@author libt * @version 创建时间:2014-5-08上午11:39:37 *
开了三个线程。一个timeThread,一个thread2,一个main thread。...
分类:
编程语言 时间:
2014-05-08 17:54:05
阅读次数:
368
Synchronizationsynchronized语法可以获取锁,
当其他线程持有锁的时候该线程想要获取锁将会进入等待状态, 直到没有其他线程持有该锁显示使用 synchronized (lock)
将会获取lock对象的锁没有显示指定锁对象将会获取当前类的class对象的锁Wait and N...
分类:
编程语言 时间:
2014-05-08 12:20:52
阅读次数:
327
进程是程序在处理机中的一次运行。一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立。所以进程是重量级的任务,它们之间的通信和转换都需要操作系统付出较大的开销。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系...
分类:
编程语言 时间:
2014-05-08 05:36:11
阅读次数:
323
线程的生命周期:新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存就绪状态:当一个线程创建了以后,其他的线程调用了它的start()方法,该线程就进入了就绪状态。处于这个状态的线程位于可运行池中,等待获得CPU的使用权运行状态:处于这个状态的线程...
分类:
编程语言 时间:
2014-05-08 05:11:34
阅读次数:
280
1 wait方法:
该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。
调用wait方法需要注意几...
分类:
编程语言 时间:
2014-05-08 01:18:35
阅读次数:
403
ExecutorService:
它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单,但是很重要,重要在这种设计的模式上。。Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线...
分类:
移动开发 时间:
2014-05-07 15:43:59
阅读次数:
438