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多线程(思维导图)的主要内容,如果未能解决你的问题,请参考以下文章