b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[全栈之路] JAVA基础课程3_多线程与死锁(20190614v1.0)

电脑杂谈  发布时间:2020-05-01 13:19:22  来源:网络整理

c++线程死锁_解决线程死锁_多线程避免死锁

博客地址:

本系列文章将主要解释JAVA的一些基本知识点,并对其进行概括以作一般归纳. 无论是JAVA开发新手还是行业资深人士,他们都希望为大多数同行带来帮助. 如有任何疑问,请留言或及时添加QQ: 243042162.

消息:

近来,习近平大力推动了“不忘初衷,怀念使命”主题教育,提出了“保持初衷,担负使命,发现差距,抓落实”的总体要求. ,这也恰好反映了我们的个人生活和工作. 人们是中年人,其中大多数人都很懒惰,缺乏学生时代的初衷,无论您年龄多大,都应摆脱借口,保持正确的态度线程避免死锁,以家庭为生,以未来为生前景,并实施技术升级和家庭教育,让自己一生有质的飞跃.

1. 进程和线程

多线程避免死锁_c++线程死锁_解决线程死锁

进程: 具有一定独立功能的程序,与某个数据集上的运行活动有关,进程是系统进行资源分配和调度的独立单元.

线程: 进程的实体是CPU调度和分配的基本单元. 它是一个基本单元,比流程小,可以独立运行. 线程本身基本上没有系统资源,只有少量在操作中必不可少的资源(例如程序计数器,一组寄存器和堆栈),但是它可以与其他线程共享该进程拥有的所有资源. 属于同一进程的线程.

区别: 进程是一个正在执行的应用程序,而线程是该进程内的执行序列. 一个进程可以有多个线程. 线程也称为轻量级进程.

a. 创建线程的几种方法

(1)继承线程

解决线程死锁_c++线程死锁_多线程避免死锁

(2)实现Runnable接口

(3)应用程序可以使用Executor框架创建线程池

b. 线程的几种状态(早上打车去上班)

(1)新建(准备呼叫蜂鸣)

(2)可操作(找到一辆可以带您上班的汽车)

c++线程死锁_多线程避免死锁_解决线程死锁

(3)跑步(驾驶员接您并带您上班)

(4)阻止(交通堵塞): 等待阻止等待多线程避免死锁,同步阻止,同步锁定,其他阻止-

Thread.sleep(长毫秒)或t.join()方法

(5)死亡(我到达公司并付钱下车)

c. 同步方法和同步代码块

解决线程死锁_多线程避免死锁_c++线程死锁

默认情况下,同步方法将此对象或当前类对象用作锁;

同步代码块可以选择锁定,这比同步方法更精细. 我们可以选择仅同步会导致同步问题的部分代码,而不是整个方法.


/**
 * 死锁实例
 * t1先运行,这个时候flag==true,先锁定obj1,然后睡眠1秒钟
 * 而t1在睡眠的时候,另一个线程t2启动,flag==false,先锁定obj2,然后也睡眠1秒钟
 * t1睡眠结束后需要锁定obj2才能继续执行,而此时obj2已被t2锁定
 * t2睡眠结束后需要锁定obj1才能继续执行,而此时obj1已被t1锁定
 * t1、t2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。 
 */
 class DeadLock implements Runnable{
    private static Object obj1 = new Object();
    private static Object obj2 = new Object();
    private boolean flag;
    public DeadLock(boolean flag){
        this.flag = flag;
    }
    @Override
    public void run(){
        System.out.println(Thread.currentThread().getName() + "运行");
        if(flag){
            synchronized(obj1){
                System.out.println(Thread.currentThread().getName() + "已经锁住obj1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized(obj2){
                    // 执行不到这里
                    System.out.println("1秒钟后,"+Thread.currentThread().getName()
                            + "锁住obj2");
                }
            }
        }else{
            synchronized(obj2){
                System.out.println(Thread.currentThread().getName() + "已经锁住obj2");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized(obj1){
                    // 执行不到这里
                    System.out.println("1秒钟后,"+Thread.currentThread().getName()
                            + "锁住obj1");
                }
            }
        }
    }
}
public class LockDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread(new DeadLock(true), "线程1");
        Thread t2 = new Thread(new DeadLock(false), "线程2");
        t1.start();
        t2.start();
    }
}

运行结果

线程2运行
线程1运行
线程1已经锁住obj1
线程2已经锁住obj2

Thread t2 = new Thread(new DeadLock(false), "线程2");

更改为


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-195304-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...