synchronized 키워드에 대한 이해
package com.finger.gates.myapplication;
public class JavaStudy {
private static Thread a, b;
public static void main(String[] args) {
MyRunnable r = new MyRunnable();
a = new Thread(r, "1");
b = new Thread(r, "2");
a.start();
//
b.start(); }
static class MyRunnable implements Runnable {
@Override
public void run() {
if (Thread.currentThread().getName().equals("1")) { synchronized (a) {
try {
Thread.sleep(500);
} catch (InterruptedException e) { e.printStackTrace(); }
synchronized (b) {
System.out.println("11111");
} } }
if (Thread.currentThread().getName().equals("2")) {
synchronized (b) {
try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); }
synchronized (a) {
System.out.println("2222"); } } } } }}
2. myrunner류를 분석해 본다.처음에 두 개의thread를 정의한 다음에 방법을 실행합니다.라인 1이 실행될 때 먼저 a를 잠그고 그를 잠들게 한 다음에 b를 잠그기;동시 스레드 2는 스레드 1과 반대되는 일을 한다.그러나synchronized의 효과는 실행 방법 과정에서 현재 대상이 잠겨 있기 때문에 라인 1이 잠긴 후에 라인 2를 잠그려고 할 때 2가 다른 라인에 잠긴 것을 발견하는 것이다.반대편 라인2도 같은 상황을 만났는데 양쪽 모두 손을 놓으려 하지 않고 이렇게 소모되어 사라진 자물쇠를 만들었다.3. 해결 방안은 이러한 상황을 피하기 위해 자물쇠를 채울 때 입도가 비교적 큰 위치를 선택한다. 예를 들어run() 방법에 직접 놓는다면public synchronised void run() _ 이렇게 하면 된다. 물론 장면이 비교적 특수하면 다시 의논한다.4. 용도는 일반적으로 시스템급 응용 프로그램을 쓰는 상황에서만 접하는 것이 많다고 한다. 예를 들어 데이터베이스를 쓸 때 읽기만 하고 쓰기만 하는 것을 제어해야 한다.5. 이미지 비교에 대한 이해를 넓히는 것은 다섯 철학자가 밥을 먹는 이야기이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.