Java多线程-Java多线程实现
1,继承Thread类
2,实现Runnable接口
3,多线程实现数据共享
1,继承Thread类
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
|
package
com.java1234.chap09.sec02;
public
class
Thread1
extends
Thread{
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) {
// 张三 李四一起吃包子 每人吃10个
Thread1 t1=
new
Thread1(
"张三线程"
);
Thread1 t2=
new
Thread1(
"李四线程"
);
t1.start();
t2.start();
}
}
|
运行输出:
张三线程 吃1第个包子
张三线程 吃2第个包子
张三线程 吃3第个包子
张三线程 吃4第个包子
张三线程 吃5第个包子
张三线程 吃6第个包子
张三线程 吃7第个包子
张三线程 吃8第个包子
张三线程 吃9第个包子
张三线程 吃10第个包子
李四线程 吃1第个包子
李四线程 吃2第个包子
李四线程 吃3第个包子
李四线程 吃4第个包子
李四线程 吃5第个包子
李四线程 吃6第个包子
李四线程 吃7第个包子
李四线程 吃8第个包子
李四线程 吃9第个包子
李四线程 吃10第个包子
2,实现Runnable接口
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
|
package
com.java1234.chap09.sec02;
public
class
Thread2
implements
Runnable{
private
int
baoZi=
1
;
private
String threadName;
public
Thread2(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) {
// 张三 李四一起吃包子 每人吃10个
Thread2 t1=
new
Thread2(
"张三线程"
);
Thread2 t2=
new
Thread2(
"李四线程"
);
Thread t11=
new
Thread(t1);
Thread t12=
new
Thread(t2);
t11.start();
t12.start();
}
}
|
运行输出:
张三线程 吃1第个包子
张三线程 吃2第个包子
李四线程 吃1第个包子
张三线程 吃3第个包子
李四线程 吃2第个包子
李四线程 吃3第个包子
李四线程 吃4第个包子
李四线程 吃5第个包子
李四线程 吃6第个包子
李四线程 吃7第个包子
李四线程 吃8第个包子
张三线程 吃4第个包子
李四线程 吃9第个包子
李四线程 吃10第个包子
张三线程 吃5第个包子
张三线程 吃6第个包子
张三线程 吃7第个包子
张三线程 吃8第个包子
张三线程 吃9第个包子
张三线程 吃10第个包子
3,多线程实现数据共享
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
|
package
com.java1234.chap09.sec02;
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第个包子
这里我们定义一个实例 然后用这个实例来是实例化三个Thread对象,run方法我们要加synchronized锁,否则会出现多个线程同时进入方法的情况,导致多个线程吃同一个包子;