Skip to content

Commit abde82d

Browse files
committed
✨ adding concurrent demos
1 parent 84d9a3d commit abde82d

10 files changed

Lines changed: 203 additions & 27 deletions

File tree

codes/advanced/pom.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,6 @@
1919
</parent>
2020
<!-- RELATIONSHIP SETTINGS END -->
2121

22-
<!-- PROPERTIES BEGIN -->
23-
<properties>
24-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25-
<java.version>1.6</java.version>
26-
<maven.compiler.source>${java.version}</maven.compiler.source>
27-
<maven.compiler.target>${java.version}</maven.compiler.target>
28-
</properties>
29-
<!-- PROPERTIES END -->
30-
3122
<!-- [Part 1] BASIC SETTINGS END -->
3223

3324

codes/basics/pom.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,6 @@
1919
</parent>
2020
<!-- RELATIONSHIP SETTINGS END -->
2121

22-
<!-- PROPERTIES BEGIN -->
23-
<properties>
24-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25-
<java.version>1.6</java.version>
26-
<maven.compiler.source>${java.version}</maven.compiler.source>
27-
<maven.compiler.target>${java.version}</maven.compiler.target>
28-
</properties>
29-
<!-- PROPERTIES END -->
30-
3122
<!-- [Part 1] BASIC SETTINGS END -->
3223

3324

codes/concurrent/pom.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?xml version="1.0"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
3+
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
7+
<!-- [Part 1] BASIC SETTINGS BEGIN -->
8+
9+
<!-- MAVEN COORDINATE BEGIN -->
10+
<artifactId>javase-notes-concurrent</artifactId>
11+
<packaging>jar</packaging>
12+
<!-- MAVEN COORDINATE END -->
13+
14+
<!-- RELATIONSHIP SETTINGS BEGIN -->
15+
<parent>
16+
<groupId>io.github.dunwu</groupId>
17+
<artifactId>javase-notes</artifactId>
18+
<version>1.0.1</version>
19+
</parent>
20+
<!-- RELATIONSHIP SETTINGS END -->
21+
22+
<!-- [Part 1] BASIC SETTINGS END -->
23+
24+
25+
<!-- [Part 3] PROJECT INFO BEGIN -->
26+
<name>${project.artifactId}</name>
27+
<description>JavaSE 学习笔记之并发篇</description>
28+
<!-- [Part 3] PROJECT INFO END -->
29+
30+
31+
</project>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.github.dunwu.javase.concurrent.chapter01;
2+
3+
/**
4+
* @author Zhang Peng
5+
*/
6+
public class MyThread implements Runnable {
7+
@Override
8+
public void run() {
9+
for (int i = 0; i < 10; i++) {
10+
try {
11+
Thread.sleep(500); // 线程休眠
12+
} catch (InterruptedException e) {
13+
e.printStackTrace();
14+
}
15+
System.out.println(Thread.currentThread().getName() + "运行,i = " + i);
16+
}
17+
}
18+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.github.dunwu.javase.concurrent.chapter01;
2+
3+
/**
4+
* @author Zhang Peng
5+
*/
6+
public class RunnableDemo implements Runnable {
7+
private int ticket = 5;
8+
private String name;
9+
10+
public RunnableDemo() {
11+
12+
}
13+
14+
public RunnableDemo(String name) {
15+
this.name = name;
16+
}
17+
18+
/**
19+
* 覆写run()方法,作为线程 的操作主体
20+
*/
21+
@Override
22+
public void run() {
23+
for (int i = 0; i < 100; i++) {
24+
if (this.ticket > 0) {
25+
System.out.println(this.name + " 卖票:ticket = " + ticket--);
26+
}
27+
}
28+
}
29+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.github.dunwu.javase.concurrent.chapter01;
2+
3+
/**
4+
* @author Zhang Peng
5+
*/
6+
public class ThreadDemo extends Thread {
7+
private int ticket = 5;
8+
9+
public ThreadDemo(String name) {
10+
super(name);
11+
}
12+
13+
/**
14+
* 覆写run()方法,作为线程 的操作主体
15+
*/
16+
@Override
17+
public void run() {
18+
for (int i = 0; i < 100; i++) {
19+
if (this.ticket > 0) {
20+
System.out.println(this.getName() + " 卖票:ticket = " + ticket--);
21+
}
22+
}
23+
}
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.github.dunwu.javase.concurrent.chapter01;
2+
3+
import org.junit.Test;
4+
5+
/**
6+
* @author Zhang Peng
7+
*/
8+
public class RunnableDemoTest {
9+
@Test
10+
public void test() {
11+
RunnableDemo runnableDemo = new RunnableDemo("Runnable 线程") ; // 实例化对象
12+
new Thread(runnableDemo).run() ; // 调用线程主体
13+
new Thread(runnableDemo).run() ; // 调用线程主体
14+
new Thread(runnableDemo).run() ; // 调用线程主体
15+
}
16+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package io.github.dunwu.javase.concurrent.chapter01;
2+
3+
import org.junit.Assert;
4+
import org.junit.Test;
5+
6+
/**
7+
* @author Zhang Peng
8+
*/
9+
public class ThreadDemoTest extends Thread {
10+
@Test
11+
public void test() {
12+
ThreadDemo threadDemo1 = new ThreadDemo("线程A"); // 实例化对象
13+
ThreadDemo threadDemo2 = new ThreadDemo("线程B"); // 实例化对象
14+
ThreadDemo threadDemo3 = new ThreadDemo("线程C"); // 实例化对象
15+
threadDemo1.run(); // 调用线程主体
16+
threadDemo2.run(); // 调用线程主体
17+
threadDemo3.run(); // 调用线程主体
18+
}
19+
20+
@Test
21+
public void testCurrentThread() {
22+
MyThread target = new MyThread(); // 实例化Runnable子类对象
23+
new Thread(target, "线程").start(); // 启动线程
24+
target.run(); // 直接调用run()方法
25+
}
26+
27+
@Test
28+
public void testSetDaemon() {
29+
MyThread target = new MyThread(); // 实例化Runnable子类对象
30+
Thread t = new Thread(target, "线程"); // 实例化Thread对象
31+
t.setDaemon(true); // 此线程在后台运行
32+
t.start(); // 启动线程
33+
}
34+
35+
@Test
36+
public void testThreadName() {
37+
MyThread target = new MyThread(); // 实例化Runnable子类对象
38+
new Thread(target).start(); // 系统自动设置线程名称
39+
new Thread(target, "线程-A").start(); // 手工设置线程名称
40+
new Thread(target, "线程-B").start(); // 手工设置线程名称
41+
new Thread(target).start(); // 系统自动设置线程名称
42+
new Thread(target).start(); // 系统自动设置线程名称
43+
}
44+
45+
@Test
46+
public void testThreadAlive() {
47+
MyThread mt = new MyThread(); // 实例化Runnable子类对象
48+
Thread t = new Thread(mt, "线程"); // 实例化Thread对象
49+
System.out.println("线程开始执行之前 --> " + t.isAlive()); // 判断是否启动
50+
Assert.assertFalse(t.isAlive());
51+
t.start(); // 启动线程
52+
System.out.println("线程开始执行之后 --> " + t.isAlive()); // 判断是否启动
53+
Assert.assertTrue(t.isAlive());
54+
for (int i = 0; i < 3; i++) {
55+
System.out.println(" main运行 --> " + i);
56+
}
57+
// 以下的输出结果不确定
58+
System.out.println("代码执行之后 --> " + t.isAlive()); // 判断是否启动
59+
}
60+
61+
@Test
62+
public void testThreadPriority() {
63+
Thread t1 = new Thread(new MyThread(), "线程A"); // 实例化线程对象
64+
Thread t2 = new Thread(new MyThread(), "线程B"); // 实例化线程对象
65+
Thread t3 = new Thread(new MyThread(), "线程C"); // 实例化线程对象
66+
t1.setPriority(Thread.MIN_PRIORITY); // 优先级最低
67+
t2.setPriority(Thread.MAX_PRIORITY); // 优先级最低
68+
t3.setPriority(Thread.NORM_PRIORITY); // 优先级最低
69+
t1.start(); // 启动线程
70+
t2.start(); // 启动线程
71+
t3.start(); // 启动线程
72+
}
73+
74+
@Test
75+
public void testThreadSleep() {
76+
MyThread target = new MyThread(); // 实例化Runnable子类对象
77+
Thread t = new Thread(target, "线程"); // 实例化Thread对象
78+
t.start(); // 启动线程
79+
80+
}
81+
}

codes/effective/pom.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,6 @@
1818
</parent>
1919
<!-- RELATIONSHIP SETTINGS END -->
2020

21-
<!-- PROPERTIES BEGIN -->
22-
<properties>
23-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24-
<java.version>1.6</java.version>
25-
<maven.compiler.source>${java.version}</maven.compiler.source>
26-
<maven.compiler.target>${java.version}</maven.compiler.target>
27-
</properties>
28-
<!-- PROPERTIES END -->
29-
3021
<!-- [Part 1] BASIC SETTINGS END -->
3122

3223

codes/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<module>advanced</module>
2121
<module>effective</module>
2222
<module>jdk8</module>
23+
<module>concurrent</module>
2324
</modules>
2425
<dependencies>
2526
<dependency>
@@ -34,6 +35,9 @@
3435
<!-- PROPERTIES BEGIN -->
3536
<properties>
3637
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
38+
<java.version>1.8</java.version>
39+
<maven.compiler.source>${java.version}</maven.compiler.source>
40+
<maven.compiler.target>${java.version}</maven.compiler.target>
3741
</properties>
3842
<!-- PROPERTIES END -->
3943

0 commit comments

Comments
 (0)