CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này Thực hành đa luồng Java - hai phương pháp in chéo được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Hiệu ứng bắt buộc: Đầu tiên in "printa..." 5 lần, sau đó in "printb..." 5 lần, mỗi lần in cách nhau 1 giây và lặp lại chu kỳ 20 lần.
Cách 1: Sử dụng các phương thức wait() và notificationall().
?
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
|
công cộng
lớp học
dịch vụ của tôi {
riêng tư
bay hơi
Boolean
cờ =
SAI
;
công cộng
đồng bộ
vô hiệu
máy in() {
thử
{
trong khi
(lá cờ) {
Chờ đợi();
}
vì
(
số nguyên
tôi =
0
; tôi <
5
; tôi++) {
hệ thống.out.println(
"in ra..."
);
đơn vị thời gian.giây.ngủ(
1
);
}
cờ =
ĐÚNG VẬY
;
thông báo cho tất cả();
}
nắm lấy
(interruptedexception e) {
e.printstacktrace();
}
}
công cộng
đồng bộ
vô hiệu
inb() {
thử
{
trong khi
(!lá cờ) {
Chờ đợi();
}
vì
(
số nguyên
tôi =
0
; tôi <
5
; tôi++) {
hệ thống.out.println(
"in b..."
);
đơn vị thời gian.giây.ngủ(
1
);
}
cờ =
SAI
;
thông báo cho tất cả();
}
nắm lấy
(interruptedexception e) {
e.printstacktrace();
}
}
}
|
?
1
2
3
4
5
6
7
8
9
10
11
|
công cộng
lớp học
sao lưu
thực hiện
có thể chạy được {
riêng tư
dịch vụ của tôi dịch vụ của tôi;
công cộng
sao lưu(dịch vụ của tôidịch vụ của tôi) {
siêu
();
cái này
.dịch vụ của tôi = dịch vụ của tôi;
}
@ghi đè
công cộng
vô hiệu
chạy() {
dịch vụ của tôi.printa();
}
}
|
?
1
2
3
4
5
6
7
8
9
10
11
|
công cộng
lớp học
sao lưub
thực hiện
có thể chạy được {
riêng tư
dịch vụ của tôi dịch vụ của tôi;
công cộng
sao lưub(dịch vụ của tôidịch vụ của tôi) {
siêu
();
cái này
.dịch vụ của tôi = dịch vụ của tôi;
}
@ghi đè
công cộng
vô hiệu
chạy() {
dịch vụ của tôi.printb();
}
}
|
?
1
2
3
4
5
6
7
8
9
|
công cộng
lớp học
chạy {
công cộng
tĩnh
vô hiệu
main(chuỗi[] args) {
dịch vụ của tôi dịch vụ của tôi =
mới
dịch vụ của tôi();
vì
(
số nguyên
tôi =
0
; tôi <
20
; tôi++) {
mới
chủ đề(
mới
sao lưu(dịch vụ của tôi)).bắt đầu();
mới
chủ đề(
mới
sao lưub(dịch vụ của tôi)).bắt đầu();
}
}
}
|
Cách 2: Sử dụng các phương thức wait() và signalall().
?
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
40
41
|
công cộng
lớp học
dịch vụ của tôi {
riêng tư
khóa khóa =
mới
khóa tái nhập();
riêng tư
điều kiện điều kiện = lock.newcondition();
riêng tư
Boolean
cờ =
SAI
;
công cộng
vô hiệu
máy in() {
thử
{
khóa.khóa();
trong khi
(lá cờ) {
condition.await();
}
vì
(
số nguyên
tôi =
0
; tôi <
5
; tôi++) {
hệ thống.out.println(
"in ra..."
);
đơn vị thời gian.giây.ngủ(
1
);
}
cờ =
ĐÚNG VẬY
;
condition.signalall();
}
nắm lấy
(interruptedexception e) {
e.printstacktrace();
}
Cuối cùng
{
khóa.mở khóa();
}
}
công cộng
vô hiệu
inb() {
thử
{
khóa.khóa();
trong khi
(!lá cờ) {
condition.await();
}
vì
(
số nguyên
tôi =
0
; tôi <
5
; tôi++) {
hệ thống.out.println(
"in b..."
);
đơn vị thời gian.giây.ngủ(
1
);
}
cờ =
SAI
;
condition.signalall();
}
nắm lấy
(interruptedexception e) {
e.printstacktrace();
}
Cuối cùng
{
khóa.mở khóa();
}
}
}
|
?
1
2
3
4
5
6
7
8
9
10
11
|
công cộng
lớp học
sợi chỉ
thực hiện
có thể chạy được {
riêng tư
dịch vụ của tôi dịch vụ của tôi;
công cộng
threada(dịch vụ của tôidịch vụ của tôi) {
siêu
();
cái này
.dịch vụ của tôi = dịch vụ của tôi;
}
@ghi đè
công cộng
vô hiệu
chạy() {
dịch vụ của tôi.printa();
}
}
|
?
1
2
3
4
5
6
7
8
9
10
11
|
công cộng
lớp học
sợi chỉb
thực hiện
có thể chạy được {
riêng tư
dịch vụ của tôi dịch vụ của tôi;
công cộng
threadb(dịch vụ của tôidịch vụ của tôi) {
siêu
();
cái này
.dịch vụ của tôi = dịch vụ của tôi;
}
@ghi đè
công cộng
vô hiệu
chạy() {
dịch vụ của tôi.printb();
}
}
|
?
1
2
3
4
5
6
7
8
9
|
công cộng
lớp học
chạy {
công cộng
tĩnh
vô hiệu
main(chuỗi[] args) {
dịch vụ của tôi dịch vụ của tôi =
mới
dịch vụ của tôi();
vì
(
số nguyên
tôi =
0
; tôi <
20
; tôi++) {
mới
chủ đề(
mới
threada(dịch vụ của tôi)).bắt đầu();
mới
chủ đề(
mới
threadb(dịch vụ của tôi)).bắt đầu();
}
}
}
|
Tóm tắt.
Trên đây là toàn bộ nội dung bài viết mong rằng nội dung bài viết có giá trị tham khảo và học tập nhất định cho quá trình học tập, làm việc của mọi người. Nếu bạn muốn biết thêm về nó, vui lòng xem các liên kết liên quan bên dưới.
Liên kết gốc: https://blog.csdn.net/qq_40378034/article/details/86766001.
Cuối cùng, bài viết này về hai phương pháp in chéo trong thực hành đa luồng Java kết thúc ở đây. Nếu bạn muốn biết thêm về hai phương pháp in chéo trong thực hành đa luồng Java, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục. Duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!