Java多线程随笔
来源:互联网 发布:标准篮球场数据 编辑:程序博客网 时间:2024/05/16 15:19
Java多线程
停止线程
- interrupt()
- Thread.interrupt();//静态方法- Thread.currentThread().interrupt();//实例方法
interrupt()方法只是提供了一个标志位,通常还需要借助
thread.isInterrupted()
方法判断,然后抛出异常的方式来真正的终止线程(建议使用异常法终止线程,因为在catch块中还可以将异常向上抛,使得线程停止的事件得以传播)sleep()
和interrupt()
不能同时执行,会抛出InterruptedException
异常
- stop()
- thread.stop();//实例方法
已经过时的方法,会导致两个问题
- 清理工作得不到完成
- 数据出现不一致性,因为同步方法很可能就只执行了一半
暂停线程
suspend()
暂停线程如果没有唤醒线程,将导致公共的同步对象的独占
resume()
- thread.suspend();//实例方法 - thread.resume();//实例方法
yield方法
放弃当前的cpu资源,使得同一优先级的线程得以执行(因为本质是恢复到可执行状态)
yield()也 不会释放锁标志。
实际上,yield()
方法对应了如下操作;先检测当前是否有相同优先级的线程处于同可运行状态,如有,则把CPU的占有权交给次线程,否则继续运行原来的线程,所以yield()方法称为“退让”,它把运行机会让给了同等级的其他线程。
Thread.yield();//静态方法
sleep方法
sleep(long)
使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会被执行;sleep(long)
可使优先级低的线程得到执行的机会,当然也可以让同优先级的线程有执行的机会;sleep(long)
是不会释放锁标志的。
守护线程(Daemon)
- 在Java线程中有两种线程,一种是用户线程,另一种是守护线程。
- Daemon的作用就是为其他线程的运行提供了便利服务,守护线程最典型的应用就是GC(垃圾回收器)。
- 只有当最后一个非守护线程结束的时候,守护线程才随着JVM一同结束工作。
synchronized关键字
- 关键字
synchronized
取得的锁都是对象锁,而不是把一段代码或方法(函数)当作锁,哪一个线程先执行了带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁Lock,那么其他线程只能是呈现等待(是等价于阻塞的概念吗?)状态,前提是多个线程访问的是同一个对象的同步方法。 - 如果两个线程访问同一个对象的两个同步的方法,则会有如下结论:
- A线程先持有object对象的Lock锁,B线程仍然可以以异步的方式调用object对象中的非synchronized类型的方法
- A线程先持有object对象的Lock锁(还没有释放),B线程如果在这个时候调用object对象中的另一个synchronized类型的方法则仍然需等待,也就是同步(同一个对象的两个同步方法的依次执行)
0 0
- Java多线程随笔
- Java多线程基础随笔
- java 多线程随笔( 一)
- java 多线程随笔(二)
- java 多线程随笔(三)
- 多线程随笔
- JAVA随笔——多线程的简介与实现
- C++多线程编程随笔
- 随笔之ros多线程
- 工作中的多线程随笔
- java 随笔
- java随笔
- java随笔
- JAVA随笔
- Java随笔
- java 随笔
- JAVA随笔
- java 随笔
- 双向长短时记忆循环神经网络详解(Bi-directional LSTM RNN)
- 微服务,微架构[四]之springboot集成Redis缓存
- Yeoman自动构建js项目
- 基于Java I/O的应用程序实验
- html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- Java多线程随笔
- 冒泡排序
- Sum—LeetCode-560 Subarray Sum Equals K
- 一行代码搞定漂亮的Android6.0权限申请界面
- reduce函数
- 支付宝退款功能开发
- reactjs1环境搭建
- 简单Profibus/DP实验系统的组建
- 最新yoco v2训练自己的数据