Java多线程(思维导图)

1,

2,

3,常用函数

Semaphore 
import java.util.concurrent.Semaphore;Semaphore name=new Semaphore(n);
name.acquire(n1);
acquire.release(n2);

lock中的wait,notify,notifyAll

4,相关例题

Answer-1:

解决办法:

注意这里使用lock-synchronized同步以及屏障

package com.cnblogs.mufasa.demo1.Answer1114;

class Foo {
    private boolean firstBlock;
    private boolean secondBlock;
    private Object lock=new Object();

    public Foo() {

    }

    public void first(Runnable printFirst) throws InterruptedException {

        synchronized(lock){
            // printFirst.run() outputs "first". Do not change or remove this line.
            printFirst.run();
            firstBlock=true;
            lock.notifyAll();
        }

    }

    public void second(Runnable printSecond) throws InterruptedException {

        synchronized(lock){
            while(!firstBlock){
                lock.wait();
            }
            // printSecond.run() outputs "second". Do not change or remove this line.
            printSecond.run();
            secondBlock=true;
            lock.notifyAll();
        }

    }

    public void third(Runnable printThird) throws InterruptedException {

        synchronized(lock){
            while(!secondBlock){
                lock.wait();
            }
            // printThird.run() outputs "third". Do not change or remove this line.
            printThird.run();
        }
    }
}

Answer-2:

解决方法:

①定义一个布尔标识符flag,决定轮替输出;

②设置一个lock-synchronized同步;

package com.cnblogs.mufasa.demo1.Answer1115;

class FooBar {
    private int n;

    private boolean flag=false;//定义一个布尔标识位
    private Object lock=new Object();//同步锁

    public FooBar(int n) {
        this.n = n;
    }

    public void foo(Runnable printFoo) throws InterruptedException {

        for (int i = 0; i < n; i++) {
            synchronized (lock){
                while (flag){
                    lock.wait();
                }
                // printFoo.run() outputs "foo". Do not change or remove this line.
                printFoo.run();
                flag=true;
                lock.notifyAll();
            }
        }
    }

    public void bar(Runnable printBar) throws InterruptedException {

        for (int i = 0; i < n; i++) {
            synchronized (lock) {
                while (!flag) {
                    lock.wait();
                }
                // printBar.run() outputs "bar". Do not change or remove this line.
                printBar.run();
                flag=false;
                lock.notifyAll();
            }
        }
    }
}

原文地址:https://www.cnblogs.com/Mufasa/p/11398373.html

时间: 2024-08-06 10:44:21

Java多线程(思维导图)的相关文章

java基础思维导图,让java不再难懂

java基础思维导图,让java不再难懂 原链接:https://my.oschina.net/u/3080373/blog/873056#0-sqq-1-75211-9737f6f9e09dfaf5d3fd14d775bfee85 思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具.了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板. 思维导图不仅仅只有简单明了这个好处,它还能加深人对主题的印象和理解,能

java技术思维导图

在网上看到有个人总结的java技术的东东,觉得很好,就保存下来了,码农还真是累啊,只有不断的学习才能有所提高,才能拿更多的RMB啊. java技术思维导图 服务端思维导图 前端思维导图

java基础思维导图

1.Java 简介.png 2.java主要特性.png 3.java发展历史.png 4.java 开发环境配置.png 5.java 基础语法.png 6.java基本概念.png 7.java面对对象 .png 8.java面对对象三大特性.png 9.java面对对象C.png 10.java基本数据类型.png 11.java基本数据类型.png 12.Java 变量类型.png 13.java修饰符.png 14.java运算符A.png 15.java运算符B.png 16.jav

Java相关思维导图分享

非常多朋友都给我发私信希望获得一份Java知识的思维导图,我来不及一一答复.原先是给大家一个百度网盘的链接分享,大家能够自己去下载,可是不知道云盘还能用多久.把相关资源转移到了QQ的群共享中.须要的朋友能够參考置顶帖.增加"Java技术交流"群获取相关资源,给大家带来的不便请原谅,可是保证思维导图中的内容非常的全,包含Java基础.高级.Web.Spring.Hibernate.MyBatis.Oracle等内容.请加群下载,谢谢!

月薪30KJava大牛整理了最新Java学习思维导图,看完茅塞顿开

文章最后有面试题福利!记得看一下哦~ 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢? 本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写到你的简历中,当然更需要的是你在面试的时候向面试官展示这些专业技能. 相信此文对正在寻觅Java程序员(Java工程师)职位的freshman以及希望成为中高级Java开发者的junior都会有所帮助. 专业技能 熟练的使用Java语言进行面向对象程序设计

Java知识思维导图

注:图片来源于网络,谢谢分享. 1 开发环境Java SDK 下载和安装2 环境变量的配置(path和classpath)3 编程基础 标识符命名规范4 Java数据类型5 运算符6 分支语句(if,switch)7 循环语句(for,while)8 函数的定义方法9 面向对象基础 面向对象与面向过程语言之间的区别10 面向对象基本思想(封装)11 类的定义方法12 对象和类的关系13 对象的创建方法14 通过对象使用成员变量和成员函数的方法15 构造函数的作用16 函数的重载17 static

Java知识点思维导图-1

JAVA基础-思维导图

java面向对象-思维导图

java面向对象思维导图

http://note.youdao.com/noteshare?id=6389cbe88e8003906c73b842da4d4750 上面的是二维码,下面的是链接,由于有点笨不会转换为图片,就把其他查看的方式更了一下....内容仅是本人个人见解,有什么不正确或不准确的欢迎指正喔? 原文地址:https://www.cnblogs.com/KiligYou/p/10888988.html