Skip to content

Commit d1cbd76

Browse files
committed
add 代码示意
1 parent 9ea9f63 commit d1cbd76

File tree

7 files changed

+261
-0
lines changed

7 files changed

+261
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package base.innerclass;
2+
3+
/**
4+
* @author:zhangluping
5+
* @description:
6+
* @date:2019/6/3 9:25
7+
*/
8+
public interface ILog {
9+
void write(String message);
10+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package base.innerclass;
2+
3+
/**
4+
* @author:zhangluping
5+
* @description:
6+
* @date:2019/6/3 9:24
7+
*/
8+
public class InnerClassDemo{
9+
private int length =0;
10+
11+
private class InnerClass implements ILog {
12+
@Override
13+
public void write(String message) {
14+
length = message.length();
15+
System.out.println("DemoClass.InnerClass:" + length);
16+
}
17+
}
18+
19+
public ILog logger() {
20+
return new InnerClass();
21+
}
22+
23+
24+
public ILog loggerAnonymity() {
25+
return new ILog() {
26+
@Override
27+
public void write(String message) {
28+
length = message.length();
29+
System.out.println("DemoClass.InnerClass:" + length);
30+
}
31+
};
32+
}
33+
34+
public ILog loggerLambda() {
35+
return message -> {
36+
length = message.length();
37+
System.out.println("DemoClass.InnerClass:" + length);
38+
};
39+
}
40+
41+
42+
public static void main(String[] args){
43+
InnerClassDemo demoClass = new InnerClassDemo();
44+
demoClass.logger().write("123");
45+
46+
//new
47+
InnerClassDemo dc = new InnerClassDemo();
48+
ILog ic = dc.loggerAnonymity();
49+
ic.write("12345");
50+
51+
dc.loggerLambda().write("123456");
52+
}
53+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package base.lambda;
2+
3+
/**
4+
* @author:zhangluping
5+
* @description:
6+
* @date:2019/6/3 20:23
7+
*/
8+
public class TestLambda {
9+
/**
10+
* lambda实现
11+
*/
12+
private static void runThreadUseLambda() {
13+
new Thread(() -> System.out.println("我是lambda实现的线程")).start();
14+
}
15+
16+
/**
17+
* 内部类实现
18+
*/
19+
private static void runThreadUseInnerClass() {
20+
21+
new Thread(new Runnable() {
22+
@Override
23+
public void run() {
24+
System.out.println("内部类实现的线程");
25+
}
26+
}).start();
27+
}
28+
29+
public static void main(String[] args) {
30+
TestLambda.runThreadUseLambda();
31+
TestLambda.runThreadUseInnerClass();
32+
}
33+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package concurrent.java.cyclicbarrier;
2+
3+
import java.util.concurrent.CyclicBarrier;
4+
5+
/**
6+
* @author:zhangluping
7+
* @description:
8+
* @date:2019/5/30 9:24
9+
*/
10+
public class CyclicBarrierDemo {
11+
public static void main(String[] args) {
12+
Runnable barrier1Action = () -> System.out.println("BarrierAction 1 executed ");
13+
Runnable barrier2Action = () -> System.out.println("BarrierAction 2 executed ");
14+
15+
CyclicBarrier barrier1 = new CyclicBarrier(2, barrier1Action);
16+
CyclicBarrier barrier2 = new CyclicBarrier(2, barrier2Action);
17+
18+
CyclicBarrierRunnable barrierRunnable1 =
19+
new CyclicBarrierRunnable(barrier1, barrier2);
20+
21+
CyclicBarrierRunnable barrierRunnable2 =
22+
new CyclicBarrierRunnable(barrier1, barrier2);
23+
24+
new Thread(barrierRunnable1).start();
25+
new Thread(barrierRunnable2).start();
26+
}
27+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package concurrent.java.cyclicbarrier;
2+
3+
import java.util.concurrent.BrokenBarrierException;
4+
import java.util.concurrent.CyclicBarrier;
5+
6+
/**
7+
* @author:zhangluping
8+
* @description:
9+
* @date:2019/5/30 9:23
10+
*/
11+
public class CyclicBarrierRunnable implements Runnable{
12+
13+
CyclicBarrier barrier1 = null;
14+
CyclicBarrier barrier2 = null;
15+
16+
public CyclicBarrierRunnable(
17+
CyclicBarrier barrier1,
18+
CyclicBarrier barrier2) {
19+
20+
this.barrier1 = barrier1;
21+
this.barrier2 = barrier2;
22+
}
23+
24+
@Override
25+
public void run() {
26+
try {
27+
Thread.sleep(1000);
28+
System.out.println(Thread.currentThread().getName() +
29+
" waiting at barrier 1");
30+
this.barrier1.await();
31+
32+
Thread.sleep(1000);
33+
System.out.println(Thread.currentThread().getName() +
34+
" waiting at barrier 2");
35+
this.barrier2.await();
36+
37+
System.out.println(Thread.currentThread().getName() +
38+
" done!");
39+
40+
} catch (InterruptedException e) {
41+
e.printStackTrace();
42+
} catch (BrokenBarrierException e) {
43+
e.printStackTrace();
44+
}
45+
}
46+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package concurrent.java.exchanger;
2+
3+
import java.util.concurrent.Exchanger;
4+
5+
/**
6+
* @author:zhangluping
7+
* @description:
8+
* @date:2019/5/30 9:28
9+
*/
10+
public class ExchangerDemo {
11+
public static class ExchangerRunnable implements Runnable{
12+
13+
Exchanger exchanger = null;
14+
Object object = null;
15+
16+
ExchangerRunnable(Exchanger exchanger, Object object) {
17+
this.exchanger = exchanger;
18+
this.object = object;
19+
}
20+
21+
@Override
22+
public void run() {
23+
try {
24+
Object previous = this.object;
25+
// if(Thread.currentThread().getId() % 2 == 0) {
26+
this.object = this.exchanger.exchange(this.object);
27+
// }
28+
System.out.println(
29+
Thread.currentThread().getName() +
30+
" exchanged " + previous + " for " + this.object
31+
);
32+
} catch (InterruptedException e) {
33+
e.printStackTrace();
34+
}
35+
}
36+
}
37+
38+
public static void main(String[] args) {
39+
Exchanger exchanger = new Exchanger();
40+
41+
ExchangerDemo.ExchangerRunnable exchangerRunnable1 =
42+
new ExchangerDemo.ExchangerRunnable(exchanger, "A");
43+
44+
ExchangerDemo.ExchangerRunnable exchangerRunnable2 =
45+
new ExchangerDemo.ExchangerRunnable(exchanger, "B");
46+
47+
ExchangerDemo.ExchangerRunnable exchangerRunnable3 =
48+
new ExchangerDemo.ExchangerRunnable(exchanger, "C");
49+
50+
ExchangerDemo.ExchangerRunnable exchangerRunnable4 =
51+
new ExchangerDemo.ExchangerRunnable(exchanger, "D");
52+
53+
new Thread(exchangerRunnable1).start();
54+
new Thread(exchangerRunnable2).start();
55+
new Thread(exchangerRunnable3).start();
56+
new Thread(exchangerRunnable4).start();
57+
}
58+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package concurrent.java.lock;
2+
3+
import java.util.concurrent.locks.ReadWriteLock;
4+
import java.util.concurrent.locks.ReentrantReadWriteLock;
5+
6+
/**
7+
* @author:zhangluping
8+
* @description:
9+
* @date:2019/5/30 12:39
10+
*/
11+
public class ReadWriteLockDemo {
12+
13+
public static void main(String[] args) {
14+
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
15+
16+
17+
readWriteLock.readLock().lock();
18+
19+
// multiple readers can enter this section
20+
// if not locked for writing, and not writers waiting
21+
// to lock for writing.
22+
23+
readWriteLock.readLock().unlock();
24+
25+
26+
readWriteLock.writeLock().lock();
27+
28+
// only one writer can enter this section,
29+
// and only if no threads are currently reading.
30+
31+
readWriteLock.writeLock().unlock();
32+
}
33+
34+
}

0 commit comments

Comments
 (0)