• 同步函数死锁现象


    多线程:一个进程中有多个线程可以同时执行任务

    多线程的好处:

    1、解决一个进程中可以同时执行多个任务的问题。

    2、提高了资源利用率

    多线程的弊端:

    1、增加了CPU的负担

    2、降低了一个进程中线程的执行概率

    3、出现了线程安全问题

    4、会引发死锁现象

    自定义线程的实现方式:

    方式一:

    1、自定义一个类继承Thread类。

    2、重写Thread类的run方法,把自定义线程的任务代码写在run方法上

    3、创建Thread的子类对象,并且调用start方法启动一个线程

    线程安全问题出现的根本原因:

    1、存在两个或两个以上的线程共享同一资源

    2、多谢操作共享资源的代码有多行

    同步函数:使用synchronized修饰的函数

    同步函数要注意的事项:

    1、如果是一个非静态的同步函数的锁对象是this对象,如果是静态的同步函数的锁对象是当前函数所属的类的字节码文件(class对象)。

    2、同步函数的锁对象是固定的,不能由你来指定。

    package com.longteng.lesson2;
    
    public class SaleTicket extends Thread {
        static  int count = 5000;
        public SaleTicket(String name){
            super(name);
        }
        @Override
        public synchronized void run(){
            while(true){
                    if (count > 0) {
                        count = count -1000;
                        System.out.println (Thread.currentThread ().getName () + "取走了1000块,还剩余" + count + "");
                    } else {
                        System.out.println ("取完了。。");
                        break;
                    }
            }
    
        }
    
        public static void main(String[] args) {
            SaleTicket thread1 = new SaleTicket ("老公");
            SaleTicket thread2 = new SaleTicket ("老婆");
            thread1.start ();
            thread2.start ();
        }
    }
    老婆取走了1000块,还剩余3000元
    老婆取走了1000块,还剩余2000元
    老婆取走了1000块,还剩余1000元
    老婆取走了1000块,还剩余0元
    取完了。。
    老公取走了1000块,还剩余4000元
    取完了。。

    推荐使用同步代码块

    1、同步代码块的锁由我们随意指定,方便控制,同步函数的锁对象是固定的

    2、同步代码块可以很方便控制需要被同步代码的范围,同步函数必须是整个函数的所有代码都被同步

    java中的同步机制解决了线程安全的问题,但同时也引发了死锁现象

  • 相关阅读:
    Queue——C#浅谈
    C#设计模式(7)——适配器模式
    test
    python 技巧
    在centos 配置python django环境 总结
    pyqt5 做的小程序,可以用来UI做个小demo
    python sqlalthemy 总结
    数据清理,预处理 pandas dataframe 操作技巧 总结
    对区块链看法
    hadoop spark 总结
  • 原文地址:https://www.cnblogs.com/zhou-test/p/9873959.html
Copyright © 2020-2023  润新知