《Java多线程编程核心技术》学习笔记(1)
《Java多线程编程核心技术》学习笔记(1)
- 一、实现多线程的编程方式
- 二、实例变量与线程安全
- 三、currentThread()方法
- 四、isAlive()方法
- 五、sleep()方法
- 六、getId()方法
- 七、停止线程
- 1)停止不了的线程 - interrupt()
- 2)判断线程是否停止状态
- 3)能停止的线程——异常法
- 4)在沉睡中停止
- 5)能停止的线程——暴力停止
- 6)能停止的线程——return
- 八、暂停线程
- 1)~~suspend~~与~~resume~~的缺点——独占
- 2)~~suspend~~与~~resume~~的缺点——不同步
- 九、yield方法
- 十、线程的优先级
- 1)线程的优先级具有继承性
- 2)线程的优先级具有规则性
- 3)线程的优先级高的运行的快
- 十一、守护线程
一、实现多线程的编程方式
(1)继承Thread类
public class MyThread extends Thread {@Overridepublic void run() {super.run();System.out.println("MyThread");}
}
public class Run {public static void main(String[] args) {MyThread mythread = new MyThread();mythread.start();System.out.println("运行结束!");}}
(2)实现Runnable接口
public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("运行中!");}
}
public class Run {public static void main(String[] args) {Runnable runnable=new MyRunnable();Thread thread=new Thread(runnable);thread.start();System.out.println("运行结束!");}}
二、实例变量与线程安全
i - - 的操作分为3步:
- 取得原有i值。
- 计算i-1。
- 对i进行赋值。
如果有多个线程同时访问,那么会存在非线程安全的问题。这个时候可以用到关键字:synchronized
public class MyThread extends Thread {private int count=5;@Overridesynchronized public void run() {super.run();count--;System.out.println("由 "+this.currentThread().getName()+" 计算,count="+count);}
}
public class Run {public static void main(String[] args) {MyThread mythread=new MyThread();Thread a=new Thread(mythread,"A");Thread b=new Thread(mythread,"B");Thread c=new Thread(mythread,"C");Thread d=new Thread(mythread,"D");Thread e=new Thread(mythread,"E");a.start();b.start();c.start();d.start();e.start();}
}
三、currentThread()方法
用于返回代码段正在被哪个线程调用的信息。
public class MyThread extends Thread {public MyThread() {System.out.println("构造方法的打印:"
+ Thread.currentThread().getName());}@Overridepublic void run() {System.out.println("run方法的打印:"
+ Thread.currentThread().getName());}}
public class Run1 {public static void main(String[] args) {System.out.println(Thread.currentThread().getName());}
}
public class Run2 {public static void main(String[] args) {MyThread mythread = new MyThread();// mythread.start();mythread.run();}
}
运行结果:
Run2 | Run2 | |
---|---|---|
构造方法的打印: | main | main |
run方法的打印: | Thread-0 | main |
四、isAlive()方法
判断当前线程是否处于活动状态
五、sleep()方法
方法sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。这个正在执行的线程是指this.currentThread()返回的线程。
六、getId()方法
取得线程的唯一标识。
七、停止线程
1)停止不了的线程 - interrupt()
调用interrupt()方法仅仅是在当前线程中打了一个停止的标记,并不是真正的停止了线程。
2)判断线程是否停止状态
this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清除为false的功能。
this.isInterrupted():测试线程Tread对象是否已经是中断状态,但不清除状态标志。
3)能停止的线程——异常法
在线程中用for语句来判断一下线程是否是停止状态,如果是停止状态,则后面的代码不再运行即可。
关键代码:for循环中break。
4)在沉睡中停止
sleep()
5)能停止的线程——暴力停止
stop()
6)能停止的线程——return
八、暂停线程
暂停线程意味着此线程还可以恢复运行。在java多线程中,可以使用suspend() 方法暂停线程,使用resume() 方法恢复线程的执行。
1)suspend与resume的缺点——独占
2)suspend与resume的缺点——不同步
九、yield方法
yield()是放弃当前的cpu资源,将它让给其他任务去占用cpu执行时间。但是放弃的时间不确定,有可能刚刚放弃,就又获得了cpu时间片。
十、线程的优先级
setPriority()方法可以设置线程的优先级。
1)线程的优先级具有继承性
2)线程的优先级具有规则性
cpu尽量将执行资源让给优先级比较高的线程,但不代表高优先级的线程全部先执行完。
3)线程的优先级高的运行的快
十一、守护线程
守护线程的作用是为其他线程的运行提供便利的服务,最典型的是GC(垃圾回收器)。
public class MyThread extends Thread {private int i = 0;@Overridepublic void run() {try {while (true) {i++;System.out.println("i=" + (i));Thread.sleep(1000);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
public class Run {public static void main(String[] args) {try {MyThread thread = new MyThread();thread.setDaemon(true);thread.start();Thread.sleep(5000);System.out.println("我离开thread对象也不再打印了,也就是停止了!");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
《Java多线程编程核心技术》学习笔记(1)相关推荐
- JavaScript高级程序设计第四版学习--第二十四章
title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...
- JavaScript高级程序设计红宝书学习笔记第三章基本概念
第三章 基本概念 本章内容 语法 数据类型 操作符 语句 函数 3.1 语法 3.1.1 区分大小写,ECMAScript中的一切(变量.函数名和操作符)都区分大小写. 3.1.2 标识符 标识符:变 ...
- javascript 高级程序设计(第4版)阅读笔记(三)
第3章,内容很长,所以更得慢,主要讲的是ECMAScript es的语言基础:语法.数据类型.基本操作符.流控制语句.理解函数,ECMAScript 的语法很大程度上借鉴了 C 语言和其他类 C ...
- 阅读JavaScript高级程序设计(第二版)笔记
第一章js简介 JavaScript诞生在1995年,当时负责进行输入型验证. JavaScript是一种专为与网页交互而设计的脚本语言,分为 : 1. ECMAScript核心语言功能. 2.文档对 ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- JavaScript高级程序设计[第3版]
JavaScript高级程序设计[第3版] package xyz.huning.toolkit.pdf;import java.io.FileOutputStream; import java.io ...
- Js高级程序设计第三版学习(十二章)
Js高级程序设计第三版学习(十二章) 第十二章 DOM2和DOM3 1.样式: 访问样式属性 任何支持style特性的HTML元素都有一 ...
- JavaScript高级程序设计 第4版----String
JavaScript高级程序设计 第4版----String 文章目录 JavaScript高级程序设计 第4版----String 1.JavaScript 字符 2.字符串操作方法 1.conca ...
- 《JavaScript高级程序设计 第3版》-学习笔记-1
P1-P30页 1.<script>标签的属性 async:async(html) | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...
- 新书-JavaScript高级程序设计:第2版(预订中,估价)
http://www.china-pub.com/196857 JavaScript的应用在广度和深度上日益扩大和加深,前端开发亟待掌握的JavaScript技能也越来越具有挑战性. 这个新版本几乎全 ...
最新文章
- java 连接数据库之一个完整的函数
- python语言入门电子版-python从入门到精通pdf
- android webview静态方法,android – 将静态HTML加载到Webview中
- CSS--居中方式总结
- 案例:隐秘而低调的内存泄露(OOM)
- SpringCloud微服务(05):Zuul组件,实现路由网关控制
- iOS界面设计之基础控件的学习 --- UITextField
- 面向对象的理解及相关概念(封装,继承,多态)
- vue商品列表滚动效果_vue+帧动画 实现 获奖奖品列表滚动循环展示
- byte类型和char类型
- poj 2870 Light Up(dfs+剪枝,写的稀烂)
- 【图像去雾】基于matlab GUI直方图均衡化+Retinex理论图像去雾【含Matlab源码 1509期】
- firefox改html内容,Firefox 中的 HTML5 音视频
- [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(3)
- 木本坚果的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- SpringBoot-logback配置输出Json格式日志
- SAP PP CO02 生产工单修改日志增强
- VUE 项目更新部署时,浏览器页面缓存问题
- 银河麒麟 安装PL2303GC USB转串口驱动
- 如何使用计算机远程关闭手机软件,如何使用手机远程遥控电脑关机?手机遥控电脑关机方法图文介绍...