美文网首页
JAVA多线程基础

JAVA多线程基础

作者: 文信彡 | 来源:发表于2019-01-22 17:06 被阅读0次

JAVA多线程主要的内容在于 Thread类与Runnable接口

public void run()方法用于放置线程要运行代码

1.常用方法

(1)start() 启动线程

(2)sleep() 线程休眠,如果有参数,第一个参数为要休眠多少毫秒,第二个参数精确到要休眠到多少纳秒

(3)join() 没有参数,其他线程需要等待当前线程运行结束才能有机会运行,有参数则是等待多少时间才有机会运行。

(4)yieid() 使当前线程释放处理器的资源,并重新竞争处理器的资源

(5)currentThread() 返回当前正在运行的线程引用

2.详解

(1)线程的停止方法:

1.错误的停止方式

1.stop()方法:

原因:调用stop方法会导致当前线程戛然而止,线程后续的操作将无法进行,如果是是正在调用循环方法时,也会直接停止。这个方法已经被JAVA官方遗弃。

2.Interrupt()方法:

原因:该方法用于中断线程,并返回一个布尔值,在使用该方法中断线程时,如果线程中含有wait,sleep等方法,该方法会清除返回的值,并抛出一个interrupt的异常,在后续使用isiterrupt或者initerrupt方法判断停止线程时,并不能正常的停止线程。

2.正确的停止方式--使用停止标志:keepRunning

volatile关键字(可见性的)

volatile boolean keepRunning=true

在run方法中使用whlie(keepRunning)进行这样可以让线程在完成所有操作后,设置keepRunning=false就可以正确的停止。

(2)线程交互:

关键字:synchronized(同步的)用于放置要加锁的代码块。

1.线程的同步:线程之间的互相通信。

Wait Set:Wait Set区域对应着一个锁对象,每个锁对象都有一个Wait Set区域,当锁对象调用了wait方法时,当前线程就会被放入Wait Set区域中,在Wait Set中的线程不会去竞争CPU资源

wait():使当前线程释放身上的锁,并把当前线程放入Wait Set中

notify():唤醒在Wait Set中的某个线程

notifyAll()唤醒在Wait Set中的所有线程

2.线程加锁,用synchronized关键字对lockObj锁对象(Object类型)加锁,从而使整个代码块加上锁。(lockObj相当于整个代码的线程)

对线程加锁会有一定的性能开销,所以,为了避免线程再次竞争得到CPU资源而产生加锁的性能开锁,使用while循环阻挡,当条件不满足让线程重新进入等待状态。

相关文章

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • Java基础

    Java基础 集合基础 集合框架 多线程基础 多线程框架 反射 代理 集合基础 ArrayList LinkedL...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

  • Java多线程系列目录(共43篇)-转

    最近,在研究Java多线程的内容目录,将其内容逐步整理并发布。 (一) 基础篇 Java多线程系列--“基础篇”0...

  • Android中的多线程

    1. Java多线程基础 Java多线程,线程同步,线程通讯 2. Android常用线程 HandlerThre...

  • Java架构师阅读书单

    一、内功心法 Java基础: 《Java核心技术》《Java编程思想》《Effective Java》 多线程...

  • java学习路线

    javaSE java基础语法 java文件操作 java网络操作 java多线程 java数据库操作 java ...

网友评论

      本文标题:JAVA多线程基础

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