线程的基本操作1
时间:2019-09-09
本文章向大家介绍线程的基本操作1,主要包括线程的基本操作1使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
java操作线程的基本API:
1. 新建线程
public class CreateThreads implements Runnable{ @Test public void method1() { Thread t1 = new Thread() { @Override public void run() { System.out.println("I am fine!"); } }; t1.start(); } @Override public void run() { System.out.println("I am runnable"); } public static void main(String[] args) { Thread thread = new Thread(new CreateThreads()); thread.start(); } }
2 .停止
stop()可以将一个线程直接退出, 强行终止线程容易导致数据不一致.
例如: 数据写入一半, stop()结束线程, 释放当前线程持有的锁, 另一个线程持锁读到这个数据并改动.
自定义线程停止: 一个volatile变量, 改变变量的方法, 停止逻辑.
3.,中断线程
线程中断是很重要的线程协作机制,
public class InterruptThread { /** * interrupt() 中断线程, 只是提供了一个提示信息, 如何退出自己决定 , 如果立即无条件退出等同于stop() * isInterrupted() 判断是否中断 * interrupted() 判断是否中断,并且清除中断状态 * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { Thread thread = new Thread() { @Override public void run() {
//自定义退出逻辑 while (Thread.currentThread().isInterrupted()) { System.out.println("exit interrupt"); break; } Thread.yield(); } }; thread.start(); thread.interrupt(); } /** * sleep()会让线程休眠若干时间并进入阻塞状态,并不会放开锁,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。遇到中断会抛出异常 * @throws InterruptedException */ @Test public void test2() throws InterruptedException { Thread thread = new Thread() { @Override public void run() { while (true) { if(Thread.currentThread().isInterrupted()) {
//第二次循环,检查到中断,跳出循环 System.out.println("interrupted"); break; } try { Thread.sleep(2000); } catch (InterruptedException e) { System.out.println("Interrupted in sleep"); //第二次中断 Thread.currentThread().interrupt(); } Thread.yield(); } } }; thread.start(); Thread.sleep(2000); //第一次中断, 此时线程在try部分, 异常触发再次添加中断 thread.interrupt(); } }
原文地址:https://www.cnblogs.com/zkfly/p/11494346.html
- chattr命令
- hdu 1561 The more, The Better (树上背包)
- hdu 1829 A Bug's Life(分组并查集(偏移量))
- 前端游戏编程基础-如何实现Canvas图像的拖拽、点击等操作
- hdu 4081 Qin Shi Huang's National Road System (次小生成树)
- python读取系统信息
- hdu 3948 Portal (kusral+离线)
- linuxmint下pycharm创建桌面快捷方式
- hdu 1811 Rank of Tetris (并查集+拓扑排序)
- Pycharm常用技巧
- hdu 1598 find the most comfortable road(枚举+卡鲁斯卡尔最小生成树)
- 查询IP地址归属详情
- oracle commit详解
- hdu 4315 Climbing the Hill(阶梯博弈转nim博弈)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法