1. 잠금 충돌이 자주 발생하면 비관적 잠금으로 전환됩니다.
2. 오랫동안, 오랫동안, 무거운 잠금으로 변환됩니다.
3. 경량 잠금을 구현할 때 가장 많이 사용되는 스핀 잠금 전략
4. 불공평한 잠금입니다
5.
6. 읽기-쓰기 잠금이 아님2. 잠금 프로세스JVM은 동기화된 잠금을 잠금 없는 잠금, 편향된 잠금, 경량 잠금 및 중량 잠금 상태로 나눕니다. 상황에 따라 순차적으로 업그레이드될 예정입니다.StringBuffer sb = new StringBuffer(); sb.append("a"); sb.append("b"); sb.append("c"); sb.append("d");
Call, task 1, task 3, 전화 끊기4. Callable 인터페이스Callable이란?Callable은 스레드에 "반환 값"을 캡슐화하는 것과 같습니다. 프로그래머가 멀티스레딩을 사용하여 결과를 계산하는 데 편리합니다.
Callable 和 Runnable 相对, 都是描述一个 "任务". Callable 描述的是带有返回值的任务, Runnable 描述的是不带返回值的任务.Callable 通常需要搭配 FutureTask 来使用. FutureTask 用来保存 Callable 的返回结果. 因为 Callable 往往是在另一个线程中执行的, 啥时候执行完并不确定. FutureTask 就可以负责这个等待结果出来的工作.
代码示例: 创建线程计算 1 + 2 + 3 + ... + 1000, 不使用 Callable 版本
public class Text { static class Result{ public int sum = 0; public Object locker = new Object(); } public static void main(String[] args) throws InterruptedException { Result result = new Result(); Thread t = new Thread(){ @Override public void run() { int sum = 0; for (int i = 0; i <=10000; i++){ sum += i; } result.sum = sum; synchronized (result.locker){ result.locker.notify(); } } }; t.start(); synchronized (result.locker){ while (result.sum == 0){ result.locker.wait(); } } System.out.println(result.sum); } }
代码示例: 创建线程计算 1 + 2 + 3 + ... + 1000, 使用 Callable 版本
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class Text1 { public static void main(String[] args) throws ExecutionException, InterruptedException { Callable<Integer> callable = new Callable<Integer>() { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i <=1000; i++){ sum += i; } return sum; } }; //由于Thread不能直接传一个callable实例,就需要一个辅助类来包装 FutureTask<Integer> futureTask = new FutureTask<>(callable); Thread t = new Thread(futureTask); t.start(); //尝试在主线程获取结果 //如果FutureTask中的结果还没生成。此时就会阻塞等待 //一直等到最终的线程把这个结果算出来,get返回 Integer result = futureTask.get(); System.out.println(result); } }
위 내용은 Java의 동기화 원리 및 사용 시나리오와 Callable 인터페이스의 사용 및 차이점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!