进程


  • 进程:自己独有内存空间,操作系统级别同时运行多个任务,每个任务相当是一个应用程序。进程间切换很耗时
  • 线程:是运行在进程上的,一个进程可以运行多个线程,线程共享同一段内存区域。线程间切换很快,一个进程中至少有一个线程在运行。

时间片长短不一定,分配给哪些线程也不一定。

thread每一个类描述一个线程
run方法定义线程要完成的任务
start方法用于启动线程,使其可以并发运行

如果两个任务运行是有先后顺序的,我们称为同步的。
如果是各自做各自的,我们称为异步的。
同步一般发生在同一线程中,异步是在多线程中完成。

使用Runnable的好处

  1. 降低耦合
  2. 可以实现多继承

Thread current = Thread.currentThread();
用于获取运行当前代码片段的线程

当程序运行起来是,OS会启动一个进程来运行JVM
而进程启动后会创建一个线程,用这个线程来运行main方法

long getID() 返回该线程的标识符
String getName() 返回线程的名称
int getPriority() 返回线程的优先级,默认是5
Thread.state.getState() 返回线程的状态
boolean isAlive() 测试线程是否处于活动状态
boolean isDaemon() 测试线程是否为守护线程
boolean isInterrupted() 测试线程是否已经中断

void setPriority(int priority)设置线程优先级

守护线程也叫后台线程
void setDaemon(boolean)当为true时该线程为守护线程
进程中,所有前台线程结束,守护线程强制结束
GC就是运行中守护线程上的

static void sleep(long ms)
用于使当前线程进入阻塞状态,阻塞时间到了,使线程进入Runnable状态,并非Running状态,所以可能存在误差

static void yield() 用于当前线程主动让出CPU时间片回到Runnable状态

void join() 用于等待当前线程结束

多线程并发访问同一数据时,会产生线程安全问题
解决办法就是把异步操作变为同步操作

被synchronized修饰的方法被称为同步方法
synchronize块用于同步某一代码片段的,通常范围小于修饰方法

当一个类中,多个方法被synchronized修饰时,这些方法就是互斥的,多个方法不允许同时执行

同步代码块
synchronized(同步监视器-锁对象引用){
//代码块
}
使用同步块可以缩小同步范围,提升并发效率,所对象通常是this

静态方法锁
public synchronized static void xxx(){……}
静态方法上锁后,同步是跨对象的。

wait:在当前对象上阻塞
notify:调用对象的notify方法,可以该对象上等待的线程解除阻塞

try {
   //在Object对象上等待
   synchronized (object) {
        /*
        * wait方法要求
        * 调用那个对象的wait方法就要将该对象加锁
        */
        object.wait();//wait是无限期等待
   }
} catch (InterruptedException e) {
    e.printStackTrace();
}

Collections可以将集合转换为线程安全的

线程池:
控制线程数量
重用线程

Executors.newCachedThreadPool() 根据需求创建线程,弹性好
Executor.newFixedThreadPool(int NThreads) 固定大小线程池
Executors.newScheduledThreadPoll(int corePoolSize) 可延迟运行任务
Executors.newSingleThreadExecutor() 单worker线程池

BlockingQueqe 双缓冲队列,存取可以异步,存取本身还是同步的

ArrayBlockingQueue 规定大小的BlockingDuque,指明大小
LinkedBlockingQueue 不定长的BlockingDuque,可规定大小
PoriorityBlockingDuque 规定大小,谁小出谁
SynchronizeQueue,只能放一个元素,放取交替进行

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

推荐阅读更多精彩内容

  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 2,609评论 0 13
  • 当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux...
    小芸论阅读 1,674评论 0 12
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,088评论 0 23
  • 细雨微飘天微沉的日子,我总会不自觉地想起西湖。百千年来,文人骚客的不绝颂赞竟使我产生“宁西湖不天堂”的情愫...
    拾语_时语阅读 156评论 0 0
  • 老鲍是个很粗鲁的人,认识他的人都知道。那是一种骨子里的粗鲁,但是老鲍并不难相处,粗鲁只是他与这个世界相处的方式,就...
    哈莫拉阅读 423评论 0 1