《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)相关推荐

  1. JavaScript高级程序设计第四版学习--第二十四章

    title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...

  2. JavaScript高级程序设计红宝书学习笔记第三章基本概念

    第三章 基本概念 本章内容 语法 数据类型 操作符 语句 函数 3.1 语法 3.1.1 区分大小写,ECMAScript中的一切(变量.函数名和操作符)都区分大小写. 3.1.2 标识符 标识符:变 ...

  3. javascript 高级程序设计(第4版)阅读笔记(三)

    第3章,内容很长,所以更得慢,主要讲的是ECMAScript   es的语言基础:语法.数据类型.基本操作符.流控制语句.理解函数,ECMAScript 的语法很大程度上借鉴了 C 语言和其他类 C  ...

  4. 阅读JavaScript高级程序设计(第二版)笔记

    第一章js简介 JavaScript诞生在1995年,当时负责进行输入型验证. JavaScript是一种专为与网页交互而设计的脚本语言,分为 : 1. ECMAScript核心语言功能. 2.文档对 ...

  5. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  6. JavaScript高级程序设计[第3版]

    JavaScript高级程序设计[第3版] package xyz.huning.toolkit.pdf;import java.io.FileOutputStream; import java.io ...

  7. Js高级程序设计第三版学习(十二章)

                                  Js高级程序设计第三版学习(十二章) 第十二章 DOM2和DOM3   1.样式: 访问样式属性 任何支持style特性的HTML元素都有一 ...

  8. JavaScript高级程序设计 第4版----String

    JavaScript高级程序设计 第4版----String 文章目录 JavaScript高级程序设计 第4版----String 1.JavaScript 字符 2.字符串操作方法 1.conca ...

  9. 《JavaScript高级程序设计 第3版》-学习笔记-1

    P1-P30页 1.<script>标签的属性 async:async(html)  | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...

  10. 新书-JavaScript高级程序设计:第2版(预订中,估价)

    http://www.china-pub.com/196857 JavaScript的应用在广度和深度上日益扩大和加深,前端开发亟待掌握的JavaScript技能也越来越具有挑战性. 这个新版本几乎全 ...

最新文章

  1. java 连接数据库之一个完整的函数
  2. python语言入门电子版-python从入门到精通pdf
  3. android webview静态方法,android – 将静态HTML加载到Webview中
  4. CSS--居中方式总结
  5. 案例:隐秘而低调的内存泄露(OOM)
  6. SpringCloud微服务(05):Zuul组件,实现路由网关控制
  7. iOS界面设计之基础控件的学习 --- UITextField
  8. 面向对象的理解及相关概念(封装,继承,多态)
  9. vue商品列表滚动效果_vue+帧动画 实现 获奖奖品列表滚动循环展示
  10. byte类型和char类型
  11. poj 2870 Light Up(dfs+剪枝,写的稀烂)
  12. 【图像去雾】基于matlab GUI直方图均衡化+Retinex理论图像去雾【含Matlab源码 1509期】
  13. firefox改html内容,Firefox 中的 HTML5 音视频
  14. [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(3)
  15. 木本坚果的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. SpringBoot-logback配置输出Json格式日志
  17. SAP PP CO02 生产工单修改日志增强
  18. VUE 项目更新部署时,浏览器页面缓存问题
  19. 银河麒麟 安装PL2303GC USB转串口驱动
  20. 如何使用计算机远程关闭手机软件,如何使用手机远程遥控电脑关机?手机遥控电脑关机方法图文介绍...

热门文章

  1. 二路归并排序和多路归并排序
  2. WPF监控云台控制组件实现简单方案
  3. 【Axure原型模板】APP原型设计通用模板 移动端通用原型模板
  4. Visual Studio 2017各版本安装包离线下载、安装全解析
  5. Windows10系统服务优化及分析(批处理)
  6. AUTOCAD——图块批量改名
  7. keil5打开keil4工程无法下载程序
  8. 中兴B860AV2.1-T刷机教程加固件
  9. python分析国家统计局数据网站人口结构、出生率、死亡率等基本情况
  10. C++实现Rhino中画准均匀B样条曲线功能