![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Jack_黄
世界将更美好!
展开
-
Java 多线程(十)多线程三大特性
多线程有三大特性原子性、可见性、有序性什么是原子性?即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行转账问题:列如,张三向李四转1000元,那么必然包括2个操作:1、从张三的账户减去1000元。2、李四的的账户增加1000元。这两个操作必须要具备原子性才能保证不出现一些意外的问题。我们操作数据也是如此,比如 i = i + 1;其中就包括,读取 i 的值,计算 i,写入 i。这行代码在 Java 中是不具备原子性的,则多线原创 2020-06-08 11:49:06 · 1030 阅读 · 0 评论 -
Java 多线程(九)ThreadLocal
ThreadLocal什么是 ThreadLocal ?ThreadLocal 提高一个线程的局部变量,访问某个线程拥有自己局部变量。 当使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal 的接口方法 ThreadLocal 类接口很简单,只有 4 个方法,我们先来了解一下:1、void set(Object value)设置当前线程的线程局原创 2020-06-06 23:42:20 · 161 阅读 · 0 评论 -
Java 多线程(八)死锁代码演示
死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁-百度百科同步嵌套同步,容易死锁下列代码极其容易死锁,建议多试几次查看效果。/** * @Author : PengPeng * 死锁演示 (建议多试几次,或者票数改大点) * 现在有 10 张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果。 */publi原创 2020-06-06 23:27:03 · 224 阅读 · 0 评论 -
Java 多线程(七)synchronized关键字
内置的锁Java 提供了一种内置的锁机制来支持原子性。每一个 Java 对象都可以用作一个实现同步的锁,称为内置锁,线程进入同步代码块之前自动获取到锁,代码块执行完成正常退出或代码块中抛出异常退出时会释放掉锁。内置锁为互斥锁,即线程 A 获取到锁后,线程 B 阻塞直到线程 A 释放锁,线程 B 才能获取到同一个锁。内置锁使用 synchronized 关键字实现,synchronized 关键字有两种用法:1、修饰需要进行同步的方法(所有访问状态变量的方法都必须进行同步),此时充当锁的对象为调用原创 2020-06-06 12:23:46 · 169 阅读 · 0 评论 -
Java 多线程(六)线程安全
什么是线程安全?当多个线程同时共享,同一个全局变量或静态变量。做写的操作时(增、删、改),可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。比如说,我们现在去上厕所。就两个厕所,但是好几十人急着上厕所。然后那个厕所又没有里面锁头,你上着厕所蹲着茅坑了,别人还推开们抢你的坑位。(这样子拉屎就不安全,需要一个锁头,别人就进不来了,需要等待)例子现在有 30 张火车票,有三个窗口同时抢火车票,请使用多线程模拟抢票效果。/** * @Author : PengPen原创 2020-06-02 21:07:41 · 226 阅读 · 0 评论 -
Java 多线程(五)join() 方法
join() 方法当在主线程中执行 t1.join() 方法时,就认为主线程应该把执行权让给子线程 t1。/** * @Author : PengPeng * join() 方法 */public class ThreadJoinDemo01 { public static void main(String[] args) throws InterruptedException { System.out.println("====程序开始====");原创 2020-06-01 20:02:31 · 245 阅读 · 0 评论 -
Java 多线程(二)线程的创建方式
线程的创建方式?线程的创建方式有四种。一、继承 Thread 类创建线程类;二、通过 Runnable 接口创建线程;三、使用匿名内部类的方式;四、通过 Callable 接口和 FutureTask 类来创建线程。Thread 类定义 Thread 类的子类,并重写该类的 run() 方法,该 run() 方法的方法体就是该线程需要完成的任务。因此把 run() 方法称为执行体。创建 Thread 子类的实例,就是创建了线程对象。调用线程对象的 start() 方法来启动线程。原创 2020-06-01 19:17:00 · 225 阅读 · 0 评论 -
Java 多线程(一)多线程入门
线程与进程区别线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在UnixSystem V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernelthread),而把用户线程(user thread)称为线程。线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,原创 2020-06-01 19:15:59 · 182 阅读 · 0 评论 -
Java 多线程(三)用户线程和守护线程
Java中有几种线程?Java 中有两种线程,一种是用户线程,另一种是守护线程。用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止。守护线程,当进程不存在或者主线程停止,守护线程也会被停止。使用 setDaemon(true) 方法设置为守护线程。例子:/** * @Author : PengPeng * 什么是守护线程? * 进程线程(主线程挂了) 守护线程也会被自动销毁。 */public class Demo01 { public static void原创 2020-06-01 17:08:45 · 257 阅读 · 0 评论 -
Java 多线程(四)线程的运行状态
多线程运行状态新键状态当用 new 操作符创建一个线程时,列如 new Thread() ,线程还没有开始运行,此时线程处在新键状态。当一个线程处在新生状态时,程序还没有开始运行线程中的代码。就绪状态一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的 start() 方法。当线程对象调用 start() 方法即启动了线程,start() 方法创建线程运行的系统资源,并调度线程运行 run() 方法。当 start() 方法返回后,线程就处于就绪状态。处于就绪状态的线程并不一定立即原创 2020-06-01 17:08:12 · 225 阅读 · 0 评论