线程死锁示例

package com.ws.thread;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class JavaTest {

    public static void main(String[] args) {

        Work work = new Work(1, 2);
        Work work2 = new Work(2, 1);

        ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("ws-%d").build();
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 60L, TimeUnit.SECONDS, new LinkedBlockingDeque<>(1024),threadFactory);

        executor.execute(work);
        executor.execute(work);
        executor.execute(work2);
        executor.execute(work2);
        executor.execute(work);
        executor.execute(work2);
        executor.execute(work2);
        executor.execute(work);
        executor.execute(work2);
        executor.execute(work);
        executor.execute(work);

        //ExecutorService service = Executors.newFixedThreadPool(10); 阿里巴巴代码规范不建议这样创建线程池
    }
}

class Work implements Runnable{

    int a ;
    int b ;

    public Work(int a , int b){
        this.a = a;
        this.b = b;
    }

    public void syn(){
        synchronized (Integer.valueOf(a)){
                System.out.println("锁住"+a);
            System.out.println("1111111111");
            synchronized (Integer.valueOf(b)){
                System.out.println("锁住"+b);
            }
        }
    }

    @Override
    public void run() {
        syn();
    }
}

猜你喜欢

转载自blog.csdn.net/bb23417274/article/details/87940353