zoukankan      html  css  js  c++  java
  • Java的线程同步

    synchronized获取的锁是对象,而不是函数或语句块。

    项目结构

    资源类

    import java.util.concurrent.TimeUnit;
    
    public class myResource {
        public void x(){
            System.out.println(Thread.currentThread().getName()+" :等待进入 synchronized in x方法");
            synchronized (this) {
                for(int i = 0;i<10;i++){
                    System.out.println(Thread.currentThread().getName()+" : synchronized in x方法");
                    try {
                        TimeUnit.MILLISECONDS.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        public void y(){
            System.out.println(Thread.currentThread().getName()+" :等待进入 synchronized in y方法");
            synchronized (this) {
                for(int i = 0;i<10;i++){
                    System.out.println(Thread.currentThread().getName()+" : synchronized in y方法");
                    try {
                        TimeUnit.MILLISECONDS.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        public void z(){
            System.out.println(Thread.currentThread().getName()+" :等待进入 synchronized in z方法");
            synchronized (this) {
                for(int i = 0;i<10;i++){
                    System.out.println(Thread.currentThread().getName()+" : synchronized in z方法");
                    try {
                        TimeUnit.MILLISECONDS.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行类

    public class Test {
    
        public static void main(String[] args) {
            myResource resource = new myResource();
            // 线程0
            new Thread(){
                public void run() {
                    resource.x();
                };
            }.start();
            // 线程1
            new Thread(){
                public void run() {
                    resource.y();
                };
            }.start();
            // 线程main
            resource.z();
        }
    
    }

    运行结果

    Thread-0 :等待进入 synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-1 :等待进入 synchronized in y方法
    main :等待进入 synchronized in z方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    Thread-0 : synchronized in x方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    main : synchronized in z方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
    Thread-1 : synchronized in y方法
  • 相关阅读:
    编译Openmv固件&增加串口
    边缘 AI 平台的比较
    CVPR2021 | 重新思考BatchNorm中的Batch
    ICCV2021 |重新思考人群中的计数和定位:一个纯粹基于点的框架
    ICCV2021 | 重新思考视觉transformers的空间维度
    CVPR2021 | Transformer用于End-to-End视频实例分割
    漫谈CUDA优化
    AAAI 2021 最佳论文公布
    综述专栏 | 姿态估计综述
    为什么GEMM是深度学习的核心
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7018442.html
Copyright © 2011-2022 走看看