11 다중 스레드
결과는 0101010101010101010101...
4
package com.test;
public class ThreadTest {
private int number = 0;
public synchronized void jia() throws InterruptedException {
if (number != 0) {
wait();
}
number++;
System.out.println("jia:"+number);
notify();
}
public synchronized void jian() throws InterruptedException {
if (number == 0) {
wait();
}
number--;
System.out.println("jian:"+number);
notify();
}
public static void main(String[] args) {
ThreadTest tt = new ThreadTest();
Producer p = new Producer(tt);
Consumer c = new Consumer(tt);
p.start();
c.start();
}
}
class Producer extends Thread{
ThreadTest tt;
public Producer(ThreadTest tt) {
this.tt=tt;
}
@Override
public void run() {
while(true){
try {
tt.jia();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer extends Thread{
ThreadTest tt;
public Consumer(ThreadTest tt) {
this.tt=tt;
}
@Override
public void run() {
while(true){
try {
tt.jian();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
출력 결과jian:0
jia:1
jian:0
jia:1
jian:0
jia:1
jian:0
jia:1
jian:0
두 개의 라인을 가동하고 두 개의 라인을 가동합니까?
private int number = 0;
public synchronized void jia() throws InterruptedException {
while (number != 0) {
wait();
}
number++;
System.out.println(Thread.currentThread().getName()+ " jia:"+number);
notify();;
}
public synchronized void jian() throws InterruptedException {
while (number == 0) {
wait();
}
number--;
System.out.println(Thread.currentThread().getName()+ " jian:"+number);
notify();
}
while로 변경하면 자물쇠가 사라질 수 있습니다. 해결 방법은 notify를 notify All로 바꾸는 방법입니다.
wait, notify, notifyAll 및 sleep 방법의 관계(중점)
(1, 만약에 한 라인이 대상의wait 방법을 호출한다면, 이 라인은 먼저 대상의 자물쇠를 가지고 있어야 한다. (한 라인이 대상의wait 방법을 호출한다면 이wait는synchronized에 있어야 한다.)
(2, 만약에 한 라인이 어떤 대상의wait 방법을 호출한다면 이 라인은 그 대상의 자물쇠를 방출할 것이다.
(3,java 대상 중 두 가지 연못이 있다(연못을 잠그고 기다리는 연못)
(4, 만약에 한 라인이 대상의wait 방법을 호출한다면 이 라인이 대상의 대기 탱크에 들어갑니다(자물쇠를 풀다). 만약 미래 어느 순간에 다른 라인이 대상의 notify나 notify All 방법을 호출한다면 이 대기 탱크에서 대기 라인이 대상의 자물쇠에 들어갑니다. 이 대상의 자물쇠를 기다리거나 잠그는 데 성공하면그러면 이 라인은wait 방법 이후의 경로를 따라 계속 실행될 것입니다.
(5,sleep 수면, 잠금 풀지 않음
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.