当前位置 : 主页 > 编程语言 > c++ >

synchronized & Lock 测试案例

来源:互联网 收集:自由互联 发布时间:2021-07-03
Synchronized import org.junit.Test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * Created by 克瑞普斯 on 2017-09-14. */public class App{ private Ob
Synchronized
import org.junit.Test;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by 克瑞普斯 on 2017-09-14.
 */
public class App
{
    private Object _Lock = new Object();

    @Test
    public void sys() throws InterruptedException
    {
        long start = System.currentTimeMillis();
        CountDownLatch latch = new CountDownLatch(10);

        for (int i = 0; i < 10; i++)
        {
            int finalI = i;
            new Thread(() -> {
                synchronized (_Lock)
                {
                    System.out.println(">>>>> " + finalI);
                    synchronized (_Lock)
                    {
                        bi(latch, finalI);
                    }
                }
            }).start();
        }

        latch.await();

        long totalTime = System.currentTimeMillis() - start;
        System.out.println("totalTime : " + totalTime);
    }

    private Lock lock = new ReentrantLock();

    @Test
    public void loc() throws InterruptedException
    {
        long start = System.currentTimeMillis();
        CountDownLatch latch = new CountDownLatch(10);

        for (int i = 0; i < 10; i++)
        {
            int finalI = i;
            new Thread(() -> {
                lock.lock();
                try
                {
                    System.out.println(">>>>> " + finalI);
                    lock.lock();
                    try
                    {
                        bi(latch, finalI);
                    } finally
                    {
                        lock.unlock();
                    }
                }finally
                {
                    lock.unlock();
                }
            }).start();
        }

        latch.await();

        long totalTime = System.currentTimeMillis() - start;
        System.out.println("totalTime : " + totalTime);
    }

    private void bi(CountDownLatch latch, int finalI)
    {
        try
        {
            Thread.sleep(1000);
            System.out.println("!!!!! " + finalI + "\n");
            latch.countDown();
        } catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

}
网友评论