博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发总结
阅读量:5134 次
发布时间:2019-06-13

本文共 1321 字,大约阅读时间需要 4 分钟。

什么是线程?

一个程序同时执行多个任务,每个任务称为一个线程(thread)。可以同时运行一个以上线程的程序被成为多线程程序(multithread)

创建一个线程并执行

new Thread().start();

中断线程

当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时,或者出现了在方法中没有捕获的异常时,线程将终止。

没有可以强制线程终止的方法,但interrupt方法可以用来请求终止线程。

线程状态

线程有6种状态

New(新建)

Runnable(可运行)
Blocked(被阻塞)
Waiting(等待)
Timed waiting(计时等待)
Terminated(终止)

New(新建)

当用new创建一个新线程对象时,线程处于新建状态
Thread t = new Thread();

Runnable(可运行)

一旦调用start(),线程处于runnable状态,可能正在运行,也可能没在运行,这取决于系统给线程提供运行的时间。

抢占式调度系统会给每一个可运行线程一个时间片来执行任务,当时间片用完,操作系统剥夺该线程的运行权,并给另一线程运行机会,当选择下一个线程时,操作系统考虑线程的优先级。

Blocked(被阻塞)

当一个线程试图获得一个内部的对象锁,而锁被其他线程持有,则该线程进入阻塞状态

Waiting(等待)

当线程等待另一个线程通知调度器一个条件时,进入waiting(等待)状态

Timed waiting(计时等待)

有几个参数有一个超时参数,调用它们导致线程进入计时等待状态。这一状态将一直保持到超时期满或者接到适当通知

Terminated(终止)

线程因如下两个原因之一而终止:
因run方法正常退出而自然死亡
因为一个没有捕获的异常终止了run方法而意外死亡

线程属性

线程优先级

每个线程有一个优先级。默认情况下,一个线程继承自父线程的优先级,调用setPriority()设置。线程优先级高度依赖于系统,Windows有7个优先级,Oracle为Linux提供的JVM线程优先级被忽略

 

守护线程

t.setDaemon(true) 可以将线程转换为一个守护线程。守护线程的唯一用途是为其他线程提供服务

当只剩下守护线程时,JVM就退出了

 

线程组

线程组是一个可以统一管理的线程集合,默认情况下,创建的所有线程属于相同的集合,但也可以创建其他组

 

处理未捕获异常处理器

线程的run方法不能抛出受查异常,但非受查异常会导致线程终止。在线程死亡前,该异常被传递到一个用于未捕获异常的处理器。

该处理器实现了Thread.UncaughtExceptionHandler接口

如果不为独立的线程安装处理器,此时的处理器就是该线程的ThreadGroup对象

 

竞争条件(race condition),两个或两个以上的线程需要共享对同一数据的存储。

Java中有两种机制防止代码块受并发访问的干扰。synchronized关键字,ReentrantLock类。

转载于:https://www.cnblogs.com/minguo/p/10815546.html

你可能感兴趣的文章
【PHP】在目标字符串指定位置插入字符串
查看>>
【JS】jQuery设置定时器,访问服务器(PHP示例)配合微信、支付宝原生支付,跳转web网页...
查看>>
实验四2
查看>>
VS2012+Win7网站发布详细步骤
查看>>
Android现学现用第十一天
查看>>
Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
查看>>
多路复用
查看>>
python 列表
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
当前主流读取Excel技术对比
查看>>
js-格式化数字保留两位小数-带千分符
查看>>
【Java】forward & redirect 的差异
查看>>
Java学习笔记--字符串和文件IO
查看>>
【BZOJ1951】古代猪文(CRT,卢卡斯定理)
查看>>
poj 2823 线段树
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
Maximum Gap
查看>>
sublime3
查看>>