博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java高并发程序设计(二)多线程基础
阅读量:6153 次
发布时间:2019-06-21

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

什么是线程:

一个程序的最小执行单元

线程new出来调用.start()启动后,进入Runnable状态(执行或者待执行),申请锁可能进入阻塞状态(BLOCKED),调用.wait()方法进入有限期等待(WATING)状态或无限期(TIMED_WAITING),等到.notify()方法通知才能回到Runnable状态,执行结束后进入Terminated状态。 

线程的基本操作 

继承Thread类,重写Run方法,.star()启动

继承Runnable接口,实例自身对象,重写.run()方法,new  Thread构造自己的实例,.star()启动

或者new Thread的时候传一个Runnable接口 的实例

线程的终止

.stop()方法终止

不推荐使用,逃过暴力,用为会立即释放monitor资源,如果一给线程写入数据只写入了一般就被.stop()终止了,就会导致数据不完整。

线程中断

调用sleep()方法让线程等待延时执行

挂起(suspend)和继续执行(resume),两个操作 都是不推荐使用的

如果resume发生在suspend之前,会导致该线程一直被挂起,所以该线程的锁也不会释放,别的线程就会一直等待锁,导致死锁的发生。

看java虚拟机的线程:

等待join和谦让yeild

守护线程

.setDeamon(true)设置

线程优先级:

.setPriority()方法调用

线程同步

用法1

用法2

用法3:

线程等待和唤醒:

调用等待和唤醒方法时需要  同步object锁实例监视器

等待.wait()方法会释放object监视器,等待另一个线程.notify()获取到object监视器后并且执行完后续操作后才会唤醒.wait()的线程。

转载于:https://juejin.im/post/5ba0f15be51d450e6e03a7c6

你可能感兴趣的文章
DBCP连接池
查看>>
cannot run programing "db2"
查看>>
mysql做主从relay-log问题
查看>>
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
redhat6.1下chrome的安装
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
类与成员变量,成员方法的测试
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>