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 ...
随机推荐
- [转]AngularJS+UI Router(1) 多步表单
本文转自:https://www.zybuluo.com/dreamapplehappy/note/54448 多步表单的实现 在线demo演示地址https://rawgit.com/dream ...
- Unity3D跨平台动态库编译---记kcp基于CMake的各平台构建实践
一 为什么需要动态库 1)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. 2)某 ...
- MVC 模型过滤
通用返回模型 /// <summary> /// WebApi返回数据的泛型类 /// </summary> /// <typeparam name="T&qu ...
- MySQL设置允许用户远程登录
. //登录数据库 mysql -u root -pvmwaremysql>use mysql; //%为所有ip都可以远程访问 mysql>update user set host = ...
- Xtrareport 多栏报表
首先看下布局designer 细节: 分组一定要用到GroupHeather 设置好有 右边会出现 接下来是代码部分 Form1中代码 using DevExpress.XtraReports.UI; ...
- 表单(form)成为 ajax 提交的表单(form)
1.form <form id="ff" method="post"> <div> <label for="name&q ...
- c#操作excel的一些记录
//开启Excel APP Excel.Application xlApp = new Excel.Application(); //获取程序下bin—>debug下的文件 ...
- 搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程
搭建maven web项目并配置quartz定时任务[业务:对比数据变化内容] 历程2018年03月03日 10:51:10 守望dfdfdf 阅读数:100更多个人分类: 工作 问题编辑版权声明:本 ...
- CommonJS 的实现原理
CommonJS 使用 Node.js 的四个环境变量moduleexportsrequireglobal 只要能够提供这四个变量,浏览器就能加载 CommonJS 模块. Browserify 是目 ...
- Android 接入支付宝支付实现
接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...