Java-关于Thread
1)进程是受操作系统管理的基本运行单元,线程是进程中独立运行的子任务
2)Thread.start()方法通知线程规划器,告知其该线程已经准备完成,可以调用其run方法,这时就是异步的方法;如果直接调用run,就没有交给线程规划器,就是同步方法。另外,执行start的顺序并不是线程启动的顺序。
3)在jvm中i--有三步操作:1、取出i的值;2、做减法;3、赋予i值
4)isAlived方法是检测线程是否属于活动状态
5)sleep的作用是指定毫秒数内让当前正在执行的线程休眠,正在执行的线程指的是this.currentThread返回的线程
6)getID方法是获取线程的唯一标识
7)Thread.stop停止线程,但是并不是线程安全的(调用Thread.stop时会抛一个ThreadDeath异常,通常不需要处理该异常,强制stop会释放锁(线程处理数据没处理完,处理到一半就释放锁了,线程就退出了,这是数据是不正确的),会对正在处理的同步数据造成破坏,出现不一致结果。)
8)利用Thread.interrupt中止线程是安全的,但interrupt并不是立即停止,而是在当前线程中打一个停止标记
9)this.interrupted判断当前线程是否是中断状态,执行后具有将状态标志清除的功能,也就是说,连续两次执行this.interrupted,第二次得到的结果必定是false;this.isInterrupted判断当前线程是否是中断状态,执行后不具有将状态标志清除的功能
10)停止线程的方法:
A)线程里是一个for循环,for循环一直判断线程是否interrupted,如果被外部中止了,break结束for循环,然后继续走for后面的语句,然后run方法就结束了;
B)线程里是一个for循环,for循环一直判断线程是否interrupted,如果被外部中止了,抛出一个异常,catch住,然后就结束run方法了;
C)线程在sleep的时候,外部执行interrupt方法中止线程,会抛InterruptExpection,可以catch这个异常,然后退出;
D)暴力停止,Thread.stop;
E)使用return停止线程
推荐用抛异常的形式结束线程,这样可以保证线程退出这个事件一直传播出去
11)suspend暂停线程,resume恢复线程。suspend和resume如果使用不当,极容易造成线程永远暂停,暂停后,线程的同步锁是无法被释放的
12)yield方法是放弃当前的CPU资源,将它让给其他任务去占用CPU执行时间,但放弃时间不确定,有可能刚刚放弃,马上就获得了CPU时间片
13)在操作系统中,可以给线程确定优先级,优先级较高的线程得到的CPU资源较多,为线程设置优先级,有利于线程规划器确定下一次选择哪个线程来优先执行。setPriorty方法可以设置线程的优先级,在1-10中间选择。线程优先级具有继承特性,例如A线程启动B线程,B线程与A线程的优先级相同。优先级具有规则性,高优先级的线程总是大部分先执行完,但不代表高优先级的线程全部先执行完;优先级具有随机性,优先级较高的线程不见得每次都先执行完
14)守护线程是一种特殊的线程,当进程中不存在非守护线程了,守护线程就退出了。典型的线程是垃圾回收线程,当进程中没有非守护线程(用户线程)时,就没有垃圾回收的意义了,垃圾回收线程就自行销毁了。
Java-关于Thread的更多相关文章
- java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
(原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...
- Java 6 Thread States and Life Cycle.
Ref: Java 6 Thread States and Life Cycle This is an example of UML protocol state machine diagram sh ...
- 对java的Thread的理解
最好不适用线程的子线程,直接调用线程,然后用rannable接口 然后如果要公用一个参数,就是公用资源的时候,一定要在run方法的前面加上synchronized 例子 猫和狗喝同一杯水(共用资源的问 ...
- Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)
线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...
- 转载:java中Thread.sleep()函数使用
点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...
- 线上zk节点报org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:187) at java.lang.Thread.run(libgcj.so.10)
线上zk做配置管理,最近突然发现两个节点一直在刷下边 java.nio.channels.CancelledKeyException at gnu.java.nio.SelectionKeyIm ...
- [Java多线程]-Thread和Runable源码解析
多线程:(百度百科借一波定义) 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提 ...
- Java并发--Thread类详情
以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 转载原文链接:http://www.cnblogs.com/dolphin0520/p/3920357.html 一 ...
- Java 线程--继承java.lang.Thread类实现线程
现实生活中的很多事情是同时进行的,Java中为了模拟这种状态,引入了线程机制.先来看线程的基本概念. 线程是指进程中的一个执行场景,也就是执行流程,进程和线程的区别: 1.每个进程是一个应用程序,都有 ...
- java之Thread Dump分析
什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机 ...
随机推荐
- 子集三种生成方法 java
增量构造法 public class Main1 { static int A[] = new int[1 << 7]; static int da[] = new int[1<&l ...
- 使用php的curl爬去青果教务系统 课表(转)
1. 分析 首先我们要了解 Http Cookie 的作用(可参考HTTP cookies 详解),简单来说就是维持一个会话,这样我们就能在登陆一个网页后,就能进入这个网页需要登陆的界面. 现在我们需 ...
- uperTextView-从未如此惊艳!一个超级的TextView
简介 下载:http://www.see-source.com/androidwidget/detail.html?wid=1273 欢迎使用SuperTextView,这篇文档将会向你展示如何使用这 ...
- python语法_深浅拷贝
浅拷贝,.copy 只拷贝第一层(可用于建立银行共享账号). s1 = [‘a’,'b','c'] s2 = s1.copy() s2[0]='d' print(s2) print(s1) 此时修改s ...
- 解决C#中FileSystemWatcher类的Changed事件触发多次的问题
public static void WatchFile() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = ...
- java基础 第六章课后习题
1.说明循环结构中break语句和continue语句的区别. 在循环结构中 break语句 是结束程序运行. continue语句是结束本句程序 不是结束程序. 2.使用for循环结构实现,从键盘 ...
- 前端面试题汇总(主要为 Vue)
前端面试题汇总 1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. 1)Model:代表数据模型,数据和业务逻辑都在Model层中定义: 2)View:代 ...
- nmcli命令使用以及网卡绑定bond
一.nmcli命令 1.什么是nmcli 以前我配置网卡的时候都要打vim /etc/sysconfig/network-scripts/ifcfg-eth0这么一长串命令,有很多配置名字还记不住就需 ...
- jQuery实现图片懒加载
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 为什么vue里面data里面的对象,无法用delete删除属性
因为vue里面的data是用get赋值的,所以无法用delete, 这时你可以用Object.defineProperty() Object.defineProperty(basic,'photo', ...