基本概念 进程与进程 说起进程就不得说一下程序,程序是指令和数据的有序集合,起本身就没有任何运行的含义,是一个静态的概念。而进程就是执行程序的一个执行过程,他是一个动态的概念,是系统资源分配的单位。通常在一个进程中包含多个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是cpu调度和执行的单位。 注意: 很多多线程是模拟出来的,真正的多线程是指有多个CPU即多核,如服务器;如果是模拟出来的多线程即...
生产者和消费者 生产者 : 不停的生产商品 消费者 : 不停的消费商品 多线程 public class mainProgram {public static void main(String[] args) {// 生产者Producer p = new Producer();Thread t = new Thread(p);t.start();// 消费者Customer c = new Customer();Thread t2 = new Thread(c);t2.start();} }生产者 public class Producer implements Runnable {static int thing = 0;static final Object Object = new Object();@O...
前言 年轻人,醒醒吧!此时不搏何时搏!本文主要讲一下常见的CAS理论。再者就是说一下锁的分类,什么乐观锁啊,悲观锁、重入锁等等。这篇文章要一网打尽,都介绍一下。把CAS按在地上摩擦 中文名:比较并交换 英文名:Compare And Swap 英文缩写:CAS 他是一种无锁化基于乐观锁思想实现的算法,目的是在不使用锁的情况下实现多线程之间的共享数据同步。在Java的java.util.concurrent包中的原子类(不是原子弹)就是基于CAS的实现的。...
多线程的简介 为什么要引入多线程呢? 如何实现多线程 实现多线程有三种方式 继承Thread实现多线程 编写一个类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程 注意:在单核CPU中,线程是交替运行的,由CPU进行调度 实现Runnable接口实现多线程 编写一个类实现Runnable接口 线程中run()和start()的区别 守护线程和用户线程的区别 生产者模式和消费者模式 多线程的应用场景 待更……
官方文档地址 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Thread.html 主类 注意://使用start()将调用run线程的方法。 package com.chenxb;import com.chenxb.thread.MyThread;public class Main {public static void main(String[] args) {MyThread myThread = new MyThread();//使该线程开始执行;Java虚拟机将调用run此线程的方法。myThread.start();//myThread.run();for (int i = 0; i < 1000...
1.线程创建 1 继承 Thread 类 采用 Thread 类创建线程,用户只需要继承 Thread,覆盖 Thread 中的 run 方法,父类 Thread 中 的 run 方法没有抛出异常,那么子类也不能抛出异常,最后采用 start 启动线程即可 2 实现runnable接口 其实 Thread 对象本身就实现了 Runnable 接口,但一般建议直接使用 Runnable 接口来写多线程 程序,因为接口会比类带来更多的好处 public class Test {public sta...
对两种多线程的对比: // Runnable 就是一个接口,Thread类实现了Runnable,Runnable存在解决只能单继承Thread的问题。 //因为Thread也实现了Runnable接口 且Runnable接口中只存在一个Run方法 // 因此,无论是implements Runnable还是 extendsThread都要实现run方法 // 只是如果是直接继承Thread类,当我们调用多线程的时候可以直接.start() // 如果是通过实现Runnable接口,那么需要实例化Thread类来调用.start() // Runnable 接口...
开篇介绍 大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些多线程高频面试题进行分享。 Q1: 线程 和 进程有什么区别? 进程: 进程是程序运行资源分配的最小单位。进程内部有多个线程,会共享这个进程中的资源。 线程: 线程是CPU调度的最小单位。必须依赖进程而存在。 特点:线程的划分尺度小于进程,这使得多线程拥有高并发性;...
? 开篇介绍 大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些多线程高频面试题进行分享。 Q1: 乐观锁 和 悲观锁 乐观锁: 乐观锁(Optimistic Locking)其实是一种思想。相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用...
开篇介绍 大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些多线程高频面试题进行分享。 Q1: 乐观锁 和 悲观锁 乐观锁: 乐观锁(Optimistic Locking)其实是一种思想。相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错...
线程停止 不使用JDK提供的方法使用标识位停止线程 public class RunnableTest1 implements Runnable{//标识位private boolean flag = true;public void run() {int i = 1;while (flag){System.out.println(i++ + "只羊");}}public void stop(){this.flag = false;System.out.println("结束");}public static void main(String[] args) {RunnableTest1 runnableTest1 = new RunnableTest1();Thread thread = new Thread(runnableTes...
synchronized(任意对象):就相当于给代码加锁了,任意对象就可以看成是一把锁。synchronized(任意对象) {多条语句操作共享数据的代码 }代码演示public class SellTicket implements Runnable {private int tickets=100;private Object obj = new Object();@Overridepublic void run() {while(true){synchronized (obj){if(tickets>0){try {Thread.sleep(100);}catch (InterruptedException e){e.printStackTrace();}System.out....
有序性(Ordering)是指在什么情况下一个处理器上运行的一个线程所执行的 内存访问操作在另外一个处理器运行的其他线程看来是乱序的(Out of Order)。 乱序是指内存访问操作的顺序看起来发生了变化。 重排序 在多核处理器的环境下,编写的顺序结构,这种操作执行的顺序可能是没有保障的: 编译器可能会改变两个操作的先后顺序; 处理器也可能不会按照目标代码的顺序执行; 这种一个处理器上执行的多个操作,在其他处理器来看它的顺序与目标...
https://www.bilibili.com/video/BV1V4411p7EF?p=11线程的状态线程的方法package com.stark.study001; /*** 测试线程stop* 1、建议线程正常停止-->利用次数,不建议死循环* 2、建议使用标志位-->设置一个标志位* 3、不要使用stop或者destroy等过时或者JDK不建议使用的方法* **/ public class TestStop implements Runnable {//1、设置一个标志位private boolean flag = true;@Overridepublic void run() {int i = 0;while(flag){Sy...
1、继承Thead类 1 package com.cn.donleo.thread.impl;2 3 /**4 * @author liangd5 * date 2020-10-31 15:296 * code 继承Thread类7 */8 public class MyThreadByThread extends Thread {9 10 /** 11 * 构造方法,继承父类可直接super 12 * 13 * @param name 14 */ 15 MyThreadByThread(String name) { 16 super(name); 17 } 18 19 @Override 20 public void run() { 21 ...