Java多线程(思维导图)

Posted mufasa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
            
        
    

 

 

 

以上是关于Java多线程(思维导图)的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程学习线程池与Executor 框架

用思维导图构建java知识架构

java11多线程

Java作业-多线程

week 11 ——java 多线程

java思维导图