Android中synchronized加锁控制主线程和子线程(同步执行、顺序执行)

news/2024/5/17 18:51:51 标签: synchronized, 线程同步通信, wait, notify, 多线程

参考网址:https://blog.csdn.net/night_dragon/article/details/54409473

https://blog.csdn.net/huanyuminhao/article/details/51960256

1.顺序执行(先让子线程执行完毕,再继续执行主线程)

private Object obj = new Object();
private void test(){
    new Thread(){
        @Override
        public void run() {
            super.run();
            try{
                for (int a=0;a<10;a++){
                    System.out.println("输出A:"+a);
                }
            }catch (Exception e){

            }finally {
                synchronized (obj) {
                    obj.notify();
                }
            }
        }
    }.start();
    try {
        synchronized (obj) {
            obj.wait();
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    for (int a=0;a<10;a++){
        System.out.println("输出B:"+a);
    }
}

打印结果

System.out: 输出A:0
System.out: 输出A:1
System.out: 输出A:2
System.out: 输出A:3
System.out: 输出A:4
System.out: 输出A:5
System.out: 输出A:6
System.out: 输出A:7
System.out: 输出A:8
System.out: 输出A:9
System.out: 输出B:0
System.out: 输出B:1
System.out: 输出B:2
System.out: 输出B:3
System.out: 输出B:4
System.out: 输出B:5
System.out: 输出B:6
System.out: 输出B:7
System.out: 输出B:8
System.out: 输出B:9

2.同步执行(子线程开始的时候,主线程正常运行)

private Object obj = new Object();
private void test(){
    new Thread(){
        @Override
        public void run() {
            super.run();
            try{
                for (int a=0;a<10;a++){
                    System.out.println("输出A:"+a);
                }
            }catch (Exception e){

            }finally {
                //synchronized (obj) {
                //    obj.notify();
                //}
            }
        }
    }.start();
    //try {
    //    synchronized (obj) {
            obj.wait();
    //    }
    //} catch (InterruptedException e) {
    //    e.printStackTrace();
    //}
    for (int a=0;a<10;a++){
        System.out.println("输出B:"+a);
    }
}

打印结果

System.out: 输出B:0
System.out: 输出B:1
System.out: 输出B:2
System.out: 输出B:3
System.out: 输出B:4
System.out: 输出B:5
System.out: 输出A:0
System.out: 输出B:6
System.out: 输出A:1
System.out: 输出B:7
System.out: 输出A:2
System.out: 输出B:8
System.out: 输出A:3
System.out: 输出B:9
System.out: 输出A:4
System.out: 输出A:5
System.out: 输出A:6
System.out: 输出A:7
System.out: 输出A:8
System.out: 输出A:9

说明:给obj对象加锁后执行顺序:子线程开始---同时向下执行遇到了加锁的obj.wait(),主线程在这里释放锁并休眠等待,当子线程运行完之后(先进入try,执行完后,进入到finally,唤醒了对象锁),代码继续向下执行


http://www.niftyadmin.cn/n/638617.html

相关文章

Android中PullRefreshLayout的下拉刷新、上拉加载

资源链接&#xff1a;PullRefreshLayout-互联网文档类资源-CSDN下载 PullRefreshLayout 的刷新、加载效果不仅可以在Activity中使用&#xff0c;也可以在Dialog或PopupWindow中使用 自定义View实现下拉刷新、上拉加载 package com.example.view.refresh;import android.anim…

jquery.validate 表单验证管理

2019独角兽企业重金招聘Python工程师标准>>> JS版本&#xff1a;1.4.2 JV版本&#xff1a;1.10.0 如果JV版本较高的话&#xff0c;基于 JS 1.4.2 将会初始化失败。 参照下例&#xff0c;创建、编辑、返回按钮事件处理在同一个表单中。利用 rules() 的参数 "add…

html添加行标记,向标记的多行部分添加html属性

Kramdown给了你很多选择,下面将依次解释。请注意,标记格式语法不在块级HTML标记。E、 你不能用降价方式*emphasis*使用原始HTML当然,您可以始终使用所有原始的HTML,它可以跨所有实现工作。事实上,如果你看sourceHeaderHeader2blah当然,你会失去写作(和阅读)的好处。然而,克拉姆…

html5 cors,html5使得CORS更简单

以前使用CORS时比较麻烦,浏览器各种设置// Create the XHR object.function createCORSRequest(method, url) {var xhr new XMLHttpRequest();if ("withCredentials" in xhr) {// XHR for Chrome/Firefox/Opera/Safari.xhr.open(method, url, true);}else if (typeo…

去哪儿酒店实时报价搜索技术分享

2019独角兽企业重金招聘Python工程师标准>>> 去哪儿酒店实时报价搜索技术分享 去哪儿酒店搜索每天处理近千万次用户的实时报价查询请求, 涉及到200多家目标网站的近30万家酒店。对其内容详细阅读 转载于:https://my.oschina.net/u/856019/blog/184684

Android中点击EditText弹出输入框

参考网址&#xff1a;https://blog.csdn.net/qq_43278826/article/details/90211583 https://www.jianshu.com/p/306482e17080 ----代码详解 1.点击Editext弹出输入框&#xff0c;EditText不被覆盖&#xff0c;并且整体布局不上移 <activityandroid:name".activi…

子层div绝对定位ie6下无效

为什么80%的码农都做不了架构师&#xff1f;>>> 子层div绝对定位,父曾div相当定位&#xff0c;在ie6下子层div绝对定位后还是初了父曾div&#xff0c;解决这个问题&#xff0c;只需要在父层div上加上宽度。 转载于:https://my.oschina.net/itxti/blog/185075

Android中Activity中代码过多优化

参考网址&#xff1a;https://blog.csdn.net/qq_36356379/article/details/88722076 说明&#xff1a;当一个Activity的布局控件比较多&#xff0c;代码逻辑处理过多时&#xff0c;需要对Activity进行优化处理&#xff1b;这样可以使Activity看起来逻辑清晰&#xff1b;以下可…