Skip to content

Commit 5b4c0d7

Browse files
朱晔朱晔
authored andcommitted
补充内部类的例子
1 parent cdca644 commit 5b4c0d7

File tree

7 files changed

+95
-2
lines changed

7 files changed

+95
-2
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.geekbang.time.commonmistakes.advancedfeatures.innerclass;
2+
3+
public class InnerClassApplication {
4+
5+
private String gender = "male";
6+
7+
public static void main(String[] args) throws Exception {
8+
9+
InnerClassApplication application = new InnerClassApplication();
10+
application.test();
11+
12+
}
13+
14+
private void test() {
15+
MyInnerClass myInnerClass = new MyInnerClass();
16+
System.out.println(myInnerClass.name);
17+
myInnerClass.test();
18+
}
19+
20+
class MyInnerClass {
21+
private String name = "zhuye";
22+
23+
void test() {
24+
System.out.println(gender);
25+
}
26+
}
27+
}

src/main/java/org/geekbang/time/commonmistakes/advancedfeatures/readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
- 反射调用方法不是以传参决定重载:reflectionissue
33
- 泛型经过类型擦除多出桥接方法的坑:genericandinheritance
44
- 注解可以继承吗?:annotationinheritance
5+
- (补充)内部类的例子:innerclass
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.geekbang.time.commonmistakes.springpart1.beansingletonandorder;
2+
3+
import lombok.Getter;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class TestA {
9+
@Autowired
10+
@Getter
11+
private TestB testB;
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.geekbang.time.commonmistakes.springpart1.beansingletonandorder;
2+
3+
import lombok.Getter;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class TestB {
9+
@Autowired
10+
@Getter
11+
private TestA testA;
12+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.geekbang.time.commonmistakes.springpart1.beansingletonandorder;
2+
3+
import lombok.Getter;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.context.annotation.Lazy;
6+
import org.springframework.stereotype.Component;
7+
8+
@Component
9+
public class TestC {
10+
@Getter
11+
private TestD testD;
12+
13+
@Autowired
14+
public TestC(@Lazy TestD testD) {
15+
this.testD = testD;
16+
}
17+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.geekbang.time.commonmistakes.springpart1.beansingletonandorder;
2+
3+
import lombok.Getter;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class TestD {
9+
@Getter
10+
private TestC testC;
11+
12+
@Autowired
13+
public TestD(TestC testC) {
14+
this.testC = testC;
15+
}
16+
}

src/main/java/org/geekbang/time/commonmistakes/threadpool/threadpooloom/ThreadPoolOOMController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,11 @@ public int right() throws InterruptedException {
109109

110110
@GetMapping("better")
111111
public int better() throws InterruptedException {
112-
AtomicInteger atomicInteger = new AtomicInteger();
112+
//这里开始是激进线程池的实现
113113
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(10) {
114114
@Override
115115
public boolean offer(Runnable e) {
116+
//先返回false,造成队列满的假象,让线程池优先扩容
116117
return false;
117118
}
118119
};
@@ -122,16 +123,23 @@ public boolean offer(Runnable e) {
122123
5, TimeUnit.SECONDS,
123124
queue, new ThreadFactoryBuilder().setNameFormat("demo-threadpool-%d").get(), (r, executor) -> {
124125
try {
125-
//executor.getQueue().put(r);
126+
//等出现拒绝后再加入队列
127+
//如果希望队列满了阻塞线程而不是抛出异常,那么可以注释掉下面三行代码,修改为executor.getQueue().put(r);
126128
if (!executor.getQueue().offer(r, 0, TimeUnit.SECONDS)) {
127129
throw new RejectedExecutionException("ThreadPool queue full, failed to offer " + r.toString());
128130
}
129131
} catch (InterruptedException e) {
130132
Thread.currentThread().interrupt();
131133
}
132134
});
135+
//激进线程池实现结束
133136

134137
printStats(threadPool);
138+
//每秒提交一个任务,每个任务耗时10秒执行完成,一共提交20个任务
139+
140+
//任务编号计数器
141+
AtomicInteger atomicInteger = new AtomicInteger();
142+
135143
IntStream.rangeClosed(1, 20).forEach(i -> {
136144
try {
137145
TimeUnit.SECONDS.sleep(1);

0 commit comments

Comments
 (0)