上一节讲到多线程的创建,两种创建方式一种继承Thread类,一种实现Runnable接口;

常用的多线程函数:

currentThread()方法        返回代码段正在被哪个线程调用的信息

isAlive()方法                   判断当前线程是否处于活动状态(线程正在运行或准备开始运行的状态)

sleep()方法                    让正在执行的线程休眠(停止执行),这个进程指的是this.currentThread返回的线程

getId()方法                取得线程的唯一标识

yield()方法                     暂时放弃cpu资源,将cpu资源让给其他程序,但是放弃的时间不确定,可能刚放弃马上又执行

interrupt()方法               在当前线程中打一个停止标记,不会停止线程

interrupted()方法            测试当前线程是否已经中断,如果已经中断,则将状态标志清除,并设置为false。(线程的中断状态由该方法清除)

isInterrupted()方法          测试线程是否已经中断,但不清除状态标志

setPriority()方法             设置线程的优先级,java中线程优先级分为1-10级,线程的优先级具有继承性。高优先级的线程总是大部分先完成。

既然有创建线程的方法,肯定有停止线程的方法,停止线程的方法主要有3种:

使用退出标志,使线程正常退出,也就是run()方法完成时,线程停止

使用stop方法强行停止线程,但是这个是已经作废的方法,现在不再使用了

使用interrupt方法中断线程

总结写在前面:停止线程的方法最好用的1.break return 跳出 2.try catch跳出

1.使用退出标志

和前面的方法6,7,8的描述一样,退出标志并不能使线程停止,只是给线程打上了一个停止标志,7,8是检查停止标志的方法。

2.使用stop方法强行停止线程

方法已作废,不做讨论

3.interrupt方法中断线程

PlanA---通过

if(this.interrupted()){

System.out.println("已经是停止状态了,我要退出了!");break;

}

使用 if 结合 break 来中断线程,但是他不能干净得结束run方法,因为break仅仅是跳出循环的操作,如果run()方法除了for循环后面还有别的操作,代码是会仅仅跳出for循环而继续执行后面的代码的。

PlanB---通过

try{for(int I = 0;I < 5000 ; I++){if(this.interrupted()){

System.out.println("Out!");throw newInterruptedException();

}

}

}catch(InterruptedException e){

System.out.println("End");

e.printStackTrace();

}

try-catch 可以通过捕获一场的方式,将整个run()方法放进 try 代码块,通过捕获 interrupt 的状态标志来抛出异常,跳出线程,达到终止线程的目的。

PlanC--通过

if(this.interrupted()){

System.out.println("Is End!");return;

}

通过使用 return 也可以跳出线程

但是通常建议使用抛异常的方式来实现线程的停止,因为在catch块中还可以将异常上抛,使线程停止的事件得以传播。

本节开始涉及到线程安全的问题,因为线程轮流占有CPU运行,当多个线程同时对一个变量进行操作是,会产生脏读的现象。

百度上的脏读是:脏读就是指当一个事物正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。------ 多线程下的对数据的操作也会出现同样的场景。(值被更改,值不同步)

为了避免出现以上的现象,多线程会引入 互斥区/临界区 的概念,通过对需要保护的数据(类/对象/方法)加锁,实现互斥的效果,达到线程的安全。

java多线程加锁,主要是通过synchronized关键字与volatile关键字,在下一节里详细写。

java丐帮_java多线程学习笔记(二)相关推荐

  1. java丐帮_Java多线程学习笔记(一)

    一.什么是多线程 首先是多线程的概念: 多线程是异步的,和单任务不同,并不一定按照代码的执行顺序(上图左)来运行,而是交错占用CPU运行(上图右): 二.如何使用多线程 JAVA多线程有两种实现方式: ...

  2. java丐帮_java多线程学习笔记(五)

    补充一个synchronized关键字的结论: 线程A先持有object对象的Lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法 A线程现持有object对 ...

  3. java丐帮_java多线程学习笔记(三)

    java多线程下的对象及变量的并发访问 上一节讲到,并发访问的时候,因为是多线程,变量如果不加锁的话,会出现"脏读"的现象,这个时候需要"临界区"的出现去解决多 ...

  4. java丐帮_java多线程学习笔记(四)

    上一节讲到Synchronized关键字,synchronized上锁的区域:对象锁=方法锁/类锁 本节补充介绍一下synchronized锁重入: 关键字synchronized拥有锁重入的功能,也 ...

  5. java丐帮_java多线程学习笔记(八)

    本节开始线程间通信: 使用wait/notify实现线程间通信 生产者/消费者模式的实现 方法join的使用 ThreadLocal类的使用 可以通过使用 sleep() 结合 while(true) ...

  6. java丐帮_java多线程学习笔记(六)

    本节开始synchronized关键字的最后一部分内容: 静态同步方法synchronized方法与synchronized(class)代码块 关键字synchronized还可以用在static静 ...

  7. java 编程思想 多线程学习笔记

    java 编程思想 多线程学习笔记 一.如何创建多线程? 1.继承 java.lang.Thread 类 2.实现 java.lang.Runnable 接口 3.Callable接口 总之,在任何线 ...

  8. java线程集合点_Java多线程学习笔记(三) 甚欢篇

    使人有乍交之欢,不若使其无久处之厌 <小窗幽记>很多时候,我们需要的都不是再多一个线程,我们需要的线程是许多个,我们需要让他们配合.同时我们还有一个愿望就是复用线程,就是将线程当做一个工人 ...

  9. java 指针_java多线程学习二十二:::java中的指针

    在上面那个图,我们看到一个特殊的变量unsafe,它的包名是 sun.misc.Unsafe;从名字看,这个类应该是封装一些不安全的操作,为什么不安全?对c语言理解的朋友就知道了,指针是不安全的,在j ...

最新文章

  1. 用Swift实现一款天气预报APP(三)
  2. Nat. Mach. Intel. | IBM RXN: 深度学习在化学反应分类上大放异彩
  3. automation服务器不能创建对象的问题
  4. python五十七:str与repr,类似于 java对象中的tostring()方法
  5. 抓个Firefox的小辫子,围观群众有:Chrome、Edge、IE8-11
  6. object - c 函数的值
  7. 个人材料(上报公司)
  8. 小K的农场(差分约束)
  9. django 1.8 官方文档翻译: 3-1-3 Django 的快捷函数
  10. Android开发笔记(八十二)SDK版本兼容
  11. jenkins配置记录(1)--添加用户权限
  12. opencv在linux设置环境变量,linux下设置opencv环境变量
  13. 从U盘安装windows/linux操作系统
  14. js时间戳写入mysql
  15. Python 并发简介(多线程、多进程)
  16. r语言调用python_R语言与Python协同工作
  17. Dell笔记本外接显示器—显示器模糊、字体不清晰
  18. K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示
  19. c语言 北京时间转换utc时间_UTC时间转换成北京时间C语言函数代码
  20. 浅析RGB 及RGB转换为ARGB

热门文章

  1. 中粮粮油化工厂人员定位解决方案,解决目前化化工厂普遍问题-新导智能
  2. SIMQKE-GR 生成人工波注意事项
  3. 关于修改手机绑定那些事!
  4. 微信小程序H5预览页面框架
  5. LaTeX - 毕业答辩Beamer
  6. C++ 取json中的某一个值,解析json字符串
  7. FBI针对HTTPS网络钓鱼发布警告
  8. 算法:最长公共子序列(输出所有最长公共子序列)
  9. mars3d与echart图表结合使用
  10. 苹果M1Operation not permitted解决办法