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方法
  • 相关阅读:
    sip
    GDB+GdbServer: ARM程序调试
    Wireshark Lua: 一个从RTP抓包里导出H.264 Payload,变成264裸码流文件(xxx.264)的Wireshark插件
    ffplay播放rtsp视频流花屏问题(含rtsp播放流程图)
    RTP 时间戳的处理
    RTSP
    RTP Tools
    图像编码中的小白问题sps ,pps ,nalu ,frame ,silce ect....
    H264中的SPS、PPS提取与作用
    VLC播放RTSP视频延迟问题
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7018442.html
Copyright © 2011-2022 走看看