Java多线程-线程同步
来源:互联网 发布:mac改语言 编辑:程序博客网 时间:2024/06/04 20:04
Java多线程-线程同步
前面的实例已经设计到同步问题:
上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package
com.java1234.chap09.sec05;
public
class
Thread1
implements
Runnable{
private
int
baoZi=
1
;
private
String threadName;
public
Thread1(String threadName) {
super
();
this
.threadName = threadName;
}
@Override
public
void
run() {
while
(baoZi<=
10
){
System.out.println(threadName+
" 吃第"
+baoZi+
"个包子"
);
baoZi++;
}
}
public
static
void
main(String[] args) {
Thread1 t1=
new
Thread1(
"超级张三线程"
);
Thread t11=
new
Thread(t1);
Thread t12=
new
Thread(t1);
Thread t13=
new
Thread(t1);
t11.start();
t12.start();
t13.start();
}
}
运行输出:
超级张三线程 吃第1个包子
超级张三线程 吃第1个包子
超级张三线程 吃第2个包子
超级张三线程 吃第3个包子
超级张三线程 吃第4个包子
超级张三线程 吃第5个包子
超级张三线程 吃第6个包子
超级张三线程 吃第7个包子
超级张三线程 吃第8个包子
超级张三线程 吃第9个包子
超级张三线程 吃第11个包子
超级张三线程 吃第8个包子
我们发现 会有多个线程同时进入方法吃包子的情况发生,这时候,就引入了线程同步。可以给方法加同步,同一时刻,只允许一个线程进入方法;
关键字 synchronized
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package
com.java1234.chap09.sec05;
public
class
Thread3
implements
Runnable{
private
int
baoZi=
1
;
private
String threadName;
public
Thread3(String threadName) {
super
();
this
.threadName = threadName;
}
@Override
public
synchronized
void
run() {
while
(baoZi<=
10
){
System.out.println(threadName+
" 吃第"
+baoZi+
"个包子"
);
baoZi++;
}
}
public
static
void
main(String[] args) {
Thread3 t1=
new
Thread3(
"超级张三线程"
);
Thread t11=
new
Thread(t1);
Thread t12=
new
Thread(t1);
Thread t13=
new
Thread(t1);
t11.start();
t12.start();
t13.start();
}
}
运行输出:
超级张三线程 吃第1个包子
超级张三线程 吃第2个包子
超级张三线程 吃第3个包子
超级张三线程 吃第4个包子
超级张三线程 吃第5个包子
超级张三线程 吃第6个包子
超级张三线程 吃第7个包子
超级张三线程 吃第8个包子
超级张三线程 吃第9个包子
超级张三线程 吃第10个包子
也可以用同步块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package
com.java1234.chap09.sec05;
public
class
Thread4
implements
Runnable{
private
int
baoZi=
1
;
private
String threadName;
public
Thread4(String threadName) {
super
();
this
.threadName = threadName;
}
@Override
public
void
run() {
/**
* 同步块
*/
synchronized
(
this
) {
while
(baoZi<=
10
){
System.out.println(threadName+
" 吃第"
+baoZi+
"个包子"
);
baoZi++;
}
}
}
public
static
void
main(String[] args) {
Thread4 t1=
new
Thread4(
"超级张三线程"
);
Thread t11=
new
Thread(t1);
Thread t12=
new
Thread(t1);
Thread t13=
new
Thread(t1);
t11.start();
t12.start();
t13.start();
}
}
运行结果一样;
阅读全文
0 0
- java多线程-线程同步
- java多线程-线程同步
- JAVA多线程:线程同步
- Java多线程-线程同步
- Java多线程-线程同步
- Java线程同步与多线程
- Java多线程与线程同步
- Java多线程之线程同步
- Java多线程之线程同步
- Java多线程 读写线程同步
- Java基础--多线程|线程同步
- java多线程之 ---- 线程同步
- java多线程值线程同步
- JAVA多线程之线程同步
- java多线程采集+线程同步
- Java多线程-线程同步问题
- Java多线程之线程同步
- JAVA 多线程--线程同步安全
- 懒人读算法(六)-查找剩余范围
- Redis学习笔记1
- clang UndefinedBehaviorSanitizer
- [日推荐]『车轮查违章』车辆违章怎么办?这个小程序能帮你!
- 1075. 链表元素分类(25)
- Java多线程-线程同步
- windows下搭建VUE开发环境
- win10尘埃4点击开始游戏自动关闭没反应|dirt4.exe进程消失的解决方法
- 牛顿迭代法 求 根
- Artificial Intelligence
- 进程和线程关系及区别
- 懒加载
- Java基础之正则表达式
- 错误信息:ids for this class must be manually assigned before calling save(): sample.db.Completedsample