Java并发知识点(2)

1.1    线程状态

线程具有以下六种状态

1. New(新创建)

2. Runnable(可运行)

3. Blocked(被阻塞)

4. Waiting(等待)

5. Timed Waiting(计时等待)

6. Terminated(被终止)

如果要获取线程的状态请用getState()方法


1.2 新创建线程

用new操作符创建一个新线程时如new Thread(r)  该线程还没有被运行,这意味着这个线程的状态是new。当一个线程处于新创建状态,程序还没有开始运行线程中的代码,可以在之前进行一些基础工作

1.3 可运行线程

一旦调用start方法,线程处于runnable状态。一个可运行的线程可能正在运行也可能没有运行,这取决与操作系统给线程提供的时间

线程开始运行不必始终保持运行

线程被调用yiela、阻塞、等待状态时才失去控制权

多处理机上 每个处理机可以运行一个线程,线程数多与处理机数目时,调度器会采用时间片机制

1.4 被阻塞线程和等待线程

要点

1. 线程处于被阻塞或等待状态时,它不活动不运行任何代码且消耗最少资源。

2. 当线程试图获取一个内部对象锁而该锁被其他线程持有则线程进入阻塞状态,当所有其他线      程释放该锁,并且线程调度器允许该线程持有它的时候,线程才变为非阻塞状态

3. 当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态

在调用�Object.wait() Thread.join()或者是等待concurrent库中的Lock和Condition会出现

4. 有几个方法有一个超时参数。调用他们导致线程进入计时等待状态,这一状态一直保持超时期满或收到适当通知

Thread.sleep() Object.wait() Thread.join() Lock.tryLock() Condition.await()

线程状态

1.5 被终止的线程

1. 因为run方法正常退出而死亡

2. 因为一个没有捕获的异常而终止,意外死亡

1.6 方法介绍

void join()   // 等待终止指定线程 void join(long millis) //等待指定的进程死亡或者经过指定的毫秒数 Thread.State  getState() //获得指定的线程状态 void stop() //停止该线程

2.1 线程属性

线程的属性包括:线程优先级、守护线程、线程组以及处理未捕获异常的处理器

Java语言中每个线程都有优先级,默认情况下一个线程继承他父亲的优先级。利用setPriority

提高或降低任何一个线程的优先级

优先级级别从1~10之间

每当线程调度器有机会选择新线程,优先选择优先级较高的线程

初级程序员习惯实现功能的正确性通过优先级,这是不对的

常用方法

void setPriority(int newPriority)  //设置线程优先级 static int MIN_PRIORITY  //最小优先级  static int NORM_PRIORITY //默认优先级 static int MAX_PRIORITY // 最高优先级 static void yield()       //使该线程处于让步状态(同样优先级的情况下)

2.2 守护线程

通过调用 t.setDaemon(true) 将线程转化为守护线程,此进程的唯一用途就是为其他线程提供服务。例如计时线程,如果虚拟机只剩下守护线程则退出程序

守护线程不去访问固有资源,如文件数据库,因为他随时可以中断

2.3 未捕获异常处理器

run方法不能抛出任何受查异常,非受查异常会导致线程终止

不需要任何catch处理异常,异常会被传递到 Thread.UncaughtExceptionHandler接口的类

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码洞

RPC 服务器之【多进程描述符传递】高阶模型

今天老师要给大家介绍一个比较特别的 RPC 服务器模型,这个模型不同于 Nginx、不同于 Redis、不同于 Apache、不同于 Tornado、不同于 N...

15220
来自专栏Java成神之路

Java_异常_01_org.apache.commons.lang.exception.NestableRuntimeException

异常信息: The type org.apache.commons.lang.exception.NestableRuntimeException cannot...

8810
来自专栏北京马哥教育

一篇文章带你梳理Python Django的正确的学习方法!

? 作者:地球的外星人君 来源: https://www.zhihu.com/question/26235428/answer/170250328 Djang...

31560
来自专栏java学习

面试题13(一个具有生命的线程有哪些状态)

考点:考察求职者对线程的理解 出现频率:★★★ 【面试题解析】线程的状态表示线程在某时间段内进行的活动和将要进行的任务程有创建、就绪、运行、阻塞、死亡5种状态。...

34550
来自专栏醒者呆

程序员必备课程——网络编程入门

关键字:互联网协议,网络分层,socket,TCP/IP协议,jdk源码,多线程,线程池,ExecutorService 本文的主要目的是面向程序员,所以...

58160
来自专栏大内老A

WCF如何克服HTTP传输协议的局限提供对不同消息传输模式的实现

WCF采用消息作为通信的唯一手段,它支持不同的消息交换模式(MEP:Message Exchange Pattern),比较典型的有以下三种MEP:One-Wa...

19360
来自专栏张尧博客

su和sudo之间的区别以及如何在Linux中配置sudo

54060
来自专栏平凡文摘

Java程序员最常用的Linux命令

25740
来自专栏Golang语言社区

服务器端Go程序对长短链接的处理及运行参数的保存

对长、短连接的处理策略(模拟心跳) 作为一个可能会和很多Client进行通讯交互的Server,首先要保证的就是整个Server运行状态的稳定性,因此在和Cli...

43870
来自专栏Jackie技术随笔

基本TCP套接口编程

为了执行网络I/O,一个进程(无论是服务端还是客户端)必须做的第一件事情就是调用socket函数。

43860

扫码关注云+社区

领取腾讯云代金券