美文网首页
Java多线程总结 之 基础概念

Java多线程总结 之 基础概念

作者: TTLLong | 来源:发表于2020-07-27 18:57 被阅读0次

基础概念

序言

好久没写文章了。最近在总结Java线程的一些知识(毕竟金九银十哈)。因此才有了这篇文章。网上关于Java线程的文章有很多。
当然也有很多使用RXJava框架的同学。由于个人工作原因,对于RxJava框架不是很了解。一直在接触Thread相关的知识。
用多了就总想总结巩固一下。因此有了这篇文章。

线程知识结构图

总结了一下多线程的相关知识,整理成了一个结构图。
线程知识结构图

线程基础

什么是线程:
线程是操作系统进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。
线程和进程的区别:
1. 线程是cpu调度的最小单位。
2. 进程是操作系统分配资源的最小单位。
什么是同步:
同步是指,程序控制不同线程间操作发生相对顺序的机制。(多个线程间,控制先后顺序的机制)
并发和并行的区别:
1. 并发:多个线程在同一个cpu上交替运行。由cpu分配不同的cpu时间片,从而实现多个线程同时运行的效果。
2. 并行:多个线程,在多个cpu上同时运行。
什么是切换上下文:
假设有线程A和线程B,同时在单核CPU上运行。cpu运行A时,会分配给相应的cpu时间片,在该时间片内从内存加载相关的线程A中执行内容的指令和数据。当时间片到了后,会把当前线程运行的数据和指令地址保存回内存中。然后从内存加载线程B相关的指令和数据
。这种任务从保存到加载的过程叫做线程的上下文切换。
Wait/Notify 等待/通知
1. 使线程进入等待状态。运行notify或者notifyAll方法进行唤醒。
    //锁的对象
    private Object obj=new Object();
    //判断条件(防止虚假唤醒)
    private volatile boolean isNotify=false;

    //在线程A中等待
    //1.锁对象
    //2.while一个判断条件(防止线程虚假唤醒)
    //3.对象.wait()
    public void wait() {
        synchronized (obj) {
            while (!isNotify) {
                obj.wait();//wait时会释放锁
            }
        }
    }

    //在线程B中唤醒
    //1.锁对象
    //2.改变判断条件
    //3.对象.notify() / 对象.notifyAll()
    //4.notify之后并不会立刻唤醒wait,必须等释放锁之后,线程A才能从wait中返回
    public void notify(){
        synchronized(obj){
            isNotify=true;
            obj.notify();//obj.notifyAll();
        }
    }
什么是死锁:
  1. 两个线程同时等待对方释放锁。
    private Object A = new Object();
    private Object B = new Object();

    /**
     * 1. 线程thead_A获取锁A,线程thread_B获取锁B
     * 2. 线程thread_A等待thread_B释放锁B
     * 3. 线程thread_B等待thread_A释放锁A
     * 4. 两个线程互相等待,形成死锁
     */
    protected void deadLock () {
        Thread thead_A = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (A) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (B) {
                        //执行其他操作
                    }
                }
            }
        });
        Thread thead_B = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (B) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (A) {
                        //执行其他操作
                    }
                }
            }
        });
        thead_A.start();
        thead_B.start();
    }
如何避免死锁:
1. 同一线程中,只使用同一把锁。
2. 用JUC(java.util.concurrent 包中的锁ReentrantLock,CountDownLauch等)中的锁,设置超时时间。用来替代关键字synchronized。
后续:
基础知识大概就是这些。如有说的不对的请批评指正。后续还会更新文章。希望这篇文章可以帮助大家。可以的话记得收藏,点赞,投币.....  好像串台了。总之记得点赞哈 ~ 

相关文章

  • java多线程相关

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

  • Java多线程总结 之 基础概念

    基础概念 序言 线程知识结构图 线程基础 什么是线程: 线程和进程的区别: 什么是同步: 并发和并行的区别: 什么...

  • 2018-07-05学习

    1.认清自己 有一定的Java基础,但是对面向对象概念、集合的概念、io、多线程、并发、处理异常、Java网络编程...

  • Android开发 Java线程基础

    简介 本篇文章是带大家了解 Java多线程的基础知识.主要内容: 介绍多线程的概念, 了解多线程的优点, 状态, ...

  • 7 多线程机制

    1.基本多线程概念参考java基础文集 2.AnsyncTask异步任务 3.Handler消息传递机制 多线程相...

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

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

  • 技术体系

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

  • Java多线程--基础概念

    Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执...

  • Java多线程目录

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

  • 无标题文章

    ### java多线程总结

网友评论

      本文标题:Java多线程总结 之 基础概念

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