美文网首页
Java高并发程序设计1

Java高并发程序设计1

作者: xinxinlimin | 来源:发表于2017-10-24 20:11 被阅读0次

Java多线程一直是Java学习的重点与难点,本人今天重点学习Java高并发一书,对其中的知识点做一个梳理。

本文脉络:主要介绍终止线程与中断线程的几种方式,终止线程中stop被遗弃,而用stopMe+break的定义方式,同时推荐使用抛出中断异常的方式。中断线程的三个方法(主要用第一个,第二个),一个中断,一个检查中断返回TRUE,两个都是非静态方法。

Java基本的线程控制

1.开始线程:extends thread 与 implements runnable

2.终止线程:stop()(但jdk已废弃):使用方式:

stop用法

stop作废的原因:当一个写线程对数据操作时,刚要写入时,此线程终止(数据未写入但锁已释放),另一个读线程读取此数据,便发生数据不一致问题。

线程终止方式:设置stopMe()方法,并用break返回。

线程终止用法

但这个地方只是终止了for循环的执行,假设for后面还有执行语句,如何全部停止(不使用return)?

异常法:

异常法中断异常

3. 线程中断:线程中断并不会使线程马上退出,而是给线程发送一个通知,告诉线程有人希望你退出了。而目标线程收到通知后如何处理,则完全由主线程自行决定。

三个主要方法:thread.interrupt()中断线程:通知目标线程中断并设置中断标志位为true.

thread.isInterrupted()判断是否被中断:判断当前线程是否中断(通过检查中断标志位)

Thread.interrupted()判断是否被中断并清除当前中断状态:判断当前线程是否中断同时清除中断位。

首先,如果我们仅仅使用interrupt,是无法中断线程的,如下:

未中断

需要加入isInterrupted()判断

但这里中断位也都是FALSE,因为调用的是当前线程main,所以是FALSE。

这样第一个就为TRUE,对于第二个为FALSE。因为interrupted不光判断,还会将标志位变为清除,也就是变为false。

正确的做法:

同时又出现问题:程序虽然中断(抛出中断异常),但后面的输出仍然继续,这就牵扯到如下:

线程在sleep中中断异常:

在线程sleep时被中断,线程自动标志位为false,所以,继续for循环仍然可以执行,修噶为:

说明:1.所有在main线程下定义的线程都是其子线程,在main方法中执行的代码都是主线程在执行,调用Thread.currentThread也可以很明确的看到。

           2.main中定义线程,这时jvm中就维护着两个线程了,sleep表示当前线程休眠,且必须抛出中断异常(检查时异常),而interrupt表示目标线程中断,isinterrupted表示当前线程中断,一定要理解明白。

          3.throw new exception表示生成异常,throws exception表示捕获异常。

          4.分析多线程,一定要了解有几个线程、每个线程在干什么、多核的话多个线程可以同时运行、线程方法的作用等。

相关文章

  • 后端好书阅读与推荐

    实战Java高并发程序设计 实战Java高并发程序设计 (豆瓣)https://book.douban.com/s...

  • 高并发Java

    高并发Java(1):前言 高并发Java(2):多线程基础 高并发Java(3):Java内存模型和线程安全 高...

  • Java并发编程-JDK并发包

    参考资料:《Java高并发程序设计》 1.同步控制 1.扩展了synchronized功能的:重入锁 1.简介 使...

  • 并行模式与算法

    java高并发程序设计 - 网易云课堂 一、单例模式 高并发情况下的单例模式 public class Stati...

  • Java高并发程序设计1

    Java多线程一直是Java学习的重点与难点,本人今天重点学习Java高并发一书,对其中的知识点做一个梳理。 本文...

  • Java并发之JDK并发包(3)

    实战Java高并发程序设计笔记 分而治之:Fork/Join框架 ForkJoinPool线程池,对于fork而言...

  • Java并发编程-线程基础

    参考资料:《Java高并发程序设计》 1.线程的基本操作 1.新建线程 1.继承Thread,重写run方法 2....

  • Java[多线程]-《实战Java高并发程序设计》多线程并发处理

    实战Java高并发程序设计(葛一鸣,郭超)读书笔记 获取方式:http://www.java1234.com/a/...

  • java多线程相关概念

    参考书籍java高并发程序设计 作者 葛一鸣、郭超 1、基本概念 1.1、同步(Synchronous)和异步(A...

  • JDK并发包

    java高并发程序设计 - 网易云课堂 一、重入锁 重入锁是synchronized,Object.wait(),...

网友评论

      本文标题:Java高并发程序设计1

      本文链接:https://www.haomeiwen.com/subject/bvuxpxtx.html