Java-多线程
ljqiang1989
关注java关注Android
展开
-
Java多线程-(7)volatile关键字
网上有不少讲这个关键字的文章,现在就一些关键点做一个总结,包括效率等。1、java内存模型要讲volatile这个关键字,先讲java内存模型目标是定义程序中各个变量的访问规则。(包括实例字段、静态字段和构成数组的元素,不包括局部变量和方法参数)1、所有的变量都存储在主内存中(虚拟机内存的一部分)。2、每条线程都由自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存原创 2014-01-03 17:56:02 · 806 阅读 · 0 评论 -
Java多线程-(6)java 原子操作
1、引入问题先看下面这两个问题,第一个问题是貌似是一个百度的笔试题,网上有不少文章做了分析,第二个只是我自己衍生了下:以下多线程对int型变量x的操作,哪几个不需要进行同步A. x=y; B. x++; C. ++x; D. x=1;以下多线程对long型变量x的操作,哪几个不需要进行同步A. x=y; B. x++; C. ++x; D原创 2014-01-03 17:14:34 · 1243 阅读 · 0 评论 -
Java多线程-(2)线程栈模型与线程的变量
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明线程(调用)栈的变化过程。这幅图描述在代码执行到两个不同时刻1、2时候,转载 2013-12-21 16:18:58 · 970 阅读 · 0 评论 -
Java多线程-(3)线程状态的转换
一、线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下:1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻转载 2013-12-21 16:25:57 · 1357 阅读 · 0 评论 -
Java多线程-(4)线程的创建、启动、Runnable和Thread
一、定义线程在Java中,多线程的实现有两种方式:1、扩展java.lang.Thread类2、实现java.lang.Runnable接口二、实例化线程1、如果是扩展java.lang.Thread类的线程,则直接new即可。2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:Thr转载 2013-12-21 17:01:05 · 4445 阅读 · 5 评论 -
Java多线程-(5)线程的优先级、sleep()、yield()、join()
1、线程的优先级见第3点(yield)中的描述。2、睡眠Thread.sleep(long millis)和Thread.sleep(long millis, int nanos)静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。当线程睡眠时,它入睡在某个地方,在苏醒之前不会返回到可运行状态。当睡眠时间到期,则返回到可运行状态。线程睡眠的原因:转载 2013-12-23 20:15:10 · 8452 阅读 · 1 评论 -
Java多线程-(1)概念与原理
一、操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,转载 2013-12-21 16:11:29 · 1095 阅读 · 0 评论 -
Java多线程-(8)线程同步、锁、死锁
一、线程同步、锁至于怎么用或者原理就不做太多讲述了,只总结了下要注意的点:1、Java中每个对象都有一个内置锁;当提到同步时,应该清楚在什么上同步?也就是说,在哪个对象上同步?2、非静态的synchronized同步方法上时,获得方法所在类的当前实例(this实例)的锁3、静态方法同步,需要一个用于整个类对象的锁,这个对象是就是这个类(XXX.class)4、如果实例拥有同原创 2014-04-16 16:12:40 · 1352 阅读 · 0 评论