java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)
今天开始就来总结一下Java多线程的基础知识点,下面是本篇的主要内容(大部分知识点参考java核心技术卷1):
- package com.zejian.test;
- /**
- * @author zejian
- * @time 2016年3月11日 下午9:57:44
- * @decrition 继承Thread实现线程
- */
- public class ThreadByEx extends Thread{
- /**
- * 重写run方法
- */
- @Override
- public void run() {
- System.out.println("I'm a thread that extends Thread!");
- }
- }
实现Runnable接口重写run方法:
- package com.zejian.test;
- /**
- * @author zejian
- * @time 2016年3月11日 下午10:00:36
- * @decrition 实现Runnable接口重写run方法
- */
- public class ThreadByRunnable implements Runnable{
- /**
- * 实现run方法
- */
- @Override
- public void run() {
- System.out.println("I'm a thread that implements Runnable !");
- }
- }
怎么启动线程?
- package com.zejian.test;
- public class MainTest {
- public static void main(String[] args) {
- //继承Thread启动的方法
- ThreadByEx t1=new ThreadByEx();
- t1.start();//启动线程
- //实现Runnable启动线程的方法
- ThreadByRunnable r = new ThreadByRunnable();
- Thread t2 =new Thread(r);
- t2.start();//启动线程
- }
- }
运行结果:
- I'm a thread that extends Thread!
- I'm a thread that implements Runnable !
- Thread.currentThread().isInterrupted()
- while(!Thread.currentThread().isInterrupted()){
- do something
- }
但是如果此时线程处于阻塞状态(sleep或者wait),就无法检查中断状态,此时会抛出如果每次迭代之后都调用sleep方法(或者其他可中断的方法),isInterrupted检测就没必要也没用处了,如果在中断状态被置位时调用sleep方法,它不会休眠反而会清除这一休眠状态并抛出InterruptedException。所以如果在循环中调用sleep,不要去检测中断状态,只需捕获InterruptedException。代码范例如下:
- while(more work to do ){
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- //thread was interrupted during sleep
- e.printStackTrace();
- }finally{
- //clean up , if required
- }
- }
- void myTask(){
- ...
- try{
- sleep(50)
- }catch(InterruptedException e){
- ...
- }
- }
正确的处理方式:
- void myTask()throw InterruptedException{
- sleep(50)
- }
或者
- void myTask(){
- ...
- try{
- sleep(50)
- }catch(InterruptedException e){
- Thread.currentThread().interrupt();
- }
- }
- package com.zejian.test;
- /**
- * @author zejian
- * @time 2016年3月12日 上午10:42:19
- * @decrition 守护线程代码示例
- */
- public class Demon {
- public static void main(String[] args) {
- Thread deamon = new Thread(new DaemonRunner(),"DaemonRunner");
- //设置为守护线程
- deamon.setDaemon(true);
- deamon.start();//启动线程
- }
- static class DaemonRunner implements Runnable{
- @Override
- public void run() {
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }finally{
- System.out.println("这里的代码在java虚拟机退出时并不一定会执行哦!");
- }
- }
- }
- }
os系统或者Ubuntu系统........
- 同步阻塞(Blocked):运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
(5). 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)的更多相关文章
- [Xcode 实际操作]八、网络与多线程-(21)延时启动画面:使用Thread线程对象的延时方法
目录:[Swift]Xcode实际操作 本文将演示如何使用线程对象的延时方法,让线程休眠一段时间,暂停动作的执行. 在项目导航区,打开启动画面的故事板[LaunchScreen.storyboard] ...
- C#多线程实践——创建和开始使用
线程用Thread类来创建, 通过ThreadStart委托来指明方法从哪里开始运行.ThreadStart的声明如下: public delegate void ThreadStart(); 调用S ...
- shell脚本(多线程批量创建用户)
shell脚本中的多线程 很多场景中会用到多线程,例如备份数据库,有100个库,正常备份效率极其低下.有了多线程原本可能需要10个小时备份,现在分10个线程同时去干,只要一个小时就解决了.今天就介绍下 ...
- day06 Socket_线程API_线程并发安全
使用多线程实现多客户端连接服务端 流程图 服务端代码改造: package socket; import java.io.BufferedReader; import java.io.IOExcept ...
- 线程优先级,设置,setPriority()方法
package seday08.thread;/** * @author xingsir * 线程优先级 * 线程启动后纳入到线程调度,线程时刻处于被动获取CPU时间片而无法主动获取.我们可以通过调整 ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- java 多线程:Thread类常用方法:setPriority优先级、interrupt中断标记、suspend暂停与唤醒resume(已过时);daemon守护线程
常用方法: boolean isAlive() 测试此线程是否存活. boolean isDaemon() 测试此线程是否为守护程序线程. static void sleep?(long millis ...
- Java并发1——线程创建、启动、生命周期与线程控制
内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 ...
- Java多线程系列--“基础篇”10之 线程优先级和守护线程
概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...
随机推荐
- fuser解决The requested resource is busy
AIX 下出现umount busy | 处理 2011-08-17 17:22:57| 分类: AIX|字号 订阅如果一个文件系统打开了一个文件,那么必须在卸载之前将该文件关闭.例如:# umo ...
- zepto.js常用操作
zepto.js是移动端的jquery,但是并没有提供所有与jquery类似的api.Zepto设计的目的是有一个5-10k的通用库.下载并快速执行.有一个熟悉通用的API,所以你能把你主要的精力放到 ...
- 安装mplayer2和smplayer2
MPlayer2 PPA源安装,打开终端,输入命令: sudo add-apt-repository ppa:motumedia/mplayer-daily sudo apt-get update s ...
- PHP post & get请求
<?php /** * HTTP 请求类 */ class HttpHelper { const METHOD_GET = 'GET'; const METHOD_POST = 'POST'; ...
- 修改mysql表的字符集
ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 修改数据库字符集: 代码如下: ALTER DAT ...
- IDEA 生成 JPA实体类
文章目录1.创建工程2.连接数据源3.生成`JPA`实体类4.生成实体类结果1.创建工程使用Maven来构建工程,为了简化创建步骤 创建一个新工程不包含任何Maven模板,[按需添加] 命名 Grou ...
- Hibernate课程 初探一对多映射5-3 Eclipse根据表反向生成实体类
1 配置 项目右击==>properties==>project facets==>convert to faceted form...复选框选中java 和 jpa==>fu ...
- Sass基础(二)
五.嵌套 在Sass中,嵌套有三种方式:选择器嵌套.属性嵌套.伪类嵌套 1.选择器嵌套 2.属性嵌套 3.伪类嵌套 六.混合宏 当样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到目的了 ...
- Form 头行附件查询
查询Form的头行附件: SELECT st.short_text order_short_text, description order_attach_desc, pk1_value order_ ...
- 解决圆角bitmap保存时背景为黑色
1.cropBitmap.copy(Bitmap.Config.ARGB_8888, true);cropBitmap.compress(Bitmap.CompressFormat.PNG, 100, ...