java并发

基本线程

线程

一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务。
1.继承Thread类,并且实现run()方法。
2.Runnable接口对象的run()方法。
Runnable更加体现面向对象,Thread是一个线程,Runnable是线程的代码。

定义任务

实现Runnable接口并编写run()方法,Runnable接口只有run()方法。
run()方法是顺序执行的。

Runnable对象转变为工作任务

调用Thread的start()方法

Executor执行器

Executor在客户端和任务执行之间提供了一个间接层,Executor允许管理异步任务的执行,无需显式地管理线程的生命周期。

  • CachedThreadPool在执行过程中通常会创建与所需数量相同的县城,然后在它回收线程时停止创建新线程。
  • FixedThreadPool使用的Thread对象的数量是有界的。
  • SingleThreadExecutor就是线程数量为1的FixedThreadPool,确保任意时刻再任何线程中都只有未已的任务在运行。

具有返回值的任务

实现Callable接口而不是Runnable接口,实现接口的(具有返回值)call()方法,并且使用ExecutorService.submit()方法调用它。
submit()方法会产生Future对象,可以调用Future对象的get()方法来获取该结果。
可以调用isDone()方法来检查Future是否已经完成。

休眠

concurrent包里提供了TimeUnit类,可以调用sleep()方法进行休眠。

优先级

可以通过getPriority()方法读取现有线程的优先级,setPriority()方法设置优先级。

让步

Thread.yield()

后台线程

程序在运行时在后台提供一种通用服务的线程,当所有非后台线程结束时,程序也就终止了,例如main().
线程启动之前调用setDaemon(true)方法,设置为后台线程。
可以调用isDaemon()方法确定线程是否是一个后台线程

加入一个线程

一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。对join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法

共享受限资源

序列化访问共享资源,即在给定时刻只允许一个任务访问共享资源(加锁)。

同步

Java以提供关键字synchronized的形式,为防止资源冲突提供了内置支持。
共享资源一般是以对象形式存在的内存片段,但也可以是文件,输入\输出端口,或者是打印机。
每个访问临界共享资源的方法都必须被同步

显示Lock对象

java.util.concurrent类库定义有java.util.concurrent.locks中的显式的互斥机制。

原子性和易变性

原子操作是不能被线程调度机制中断的操作,原子性可以应用于除long和doubel之外的基本类型之上的'简单操作'

原子类:AtomicInteger、AtomicLong、AtomicReference原子性变量类

临界区:防止多个线程同时访问方法内部的部分代码而不是访问整个方法,通过这种方式分离出来的代码段被称为临界区。

synchronized(syncObject){
  //This code can be accessed
  //by only one task at a time
} 

线程本地存储

防止任务在共享资源上产生冲突的第二种方式是根除对变量的共享。线程本地存储是一种自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储。
创建和管理线程本地存储可以由java.lang.ThreadLocal类来实现。.

线程之间的协作

wait()和notify()

wait()被调用时,线程的执行被挂起,对象上的锁被释放。
可以通过notify() 或者notifyAll(),或者令时间到期,从wait()中恢复执行。
只能在同步控制方法或同步控制块里调用wait()、notify()和notifyAll()

线程内部的数据共享

ThreadLocal线程局部变量。一个ThreadLocal代表一个变量,ThreadLocal每个使用该变量的线程提供独立的变量副本。
ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键位线程对象,而值对应线程的变量副本。

生产者与消费者

死锁

某个任务在等待另一个任务,而后者又等待别的任务,这样一直下去,直到这个链条上的任务又在等待第一个任务释放锁。这得到了一个任务之间相互等待的连续循环,没有哪个线程能继续。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 一、并发 进程:每个进程都拥有自己的一套变量 线程:线程之间共享数据 1.线程 Java中为多线程任务提供了很多的...
    SeanMa阅读 2,386评论 0 11
  • 原文链接 译者:靖靖 并发 进程和线程 在并发编程当中,有两个基本的执行单元:进程和线程。在java中,我们大部分...
    4b4f3ceb6f71阅读 799评论 4 16
  • 一.线程安全性 线程安全是建立在对于对象状态访问操作进行管理,特别是对共享的与可变的状态的访问 解释下上面的话: ...
    黄大大吃不胖阅读 813评论 0 3
  • 1、线程安全与锁 线程安全的本质,在于 存在了共享的可变状态 status, 在多线程共同操作状态变量时,当计算的...
    轩居晨风阅读 334评论 1 1
  • 今年的教师节于我而言有些特殊――从教以来第一次不做班主任的教师节。 从罗校长办公室走出来,回想着掷...
    风清杨_508d阅读 634评论 4 8