Java 多线程 (PART XVII) Lock (I) Lock实现线程同步

23 篇文章 0 订阅
23 篇文章 1 订阅

ReentrantLock类

ReentrantLock类可以实现和synchronized关键字一样的功能。

示例代码

package hello;

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

class Service {
    private Lock lock = new ReentrantLock();

    public void testMethod() {
        lock.lock();//加锁
        System.out.println("ThreadName =" + Thread.currentThread().getName() +"----------------------------");
        for (int i = 0; i < 5; i++) {
            System.out.println("ThreadName =" + Thread.currentThread().getName() + (" " + (i + 1)));
        }

        lock.unlock();//释放锁
    }
}

class MyThread extends Thread {
    private Service service;

    public MyThread(Service service) {
        this.service = service;
    }

    @Override
    public void run() {
        this.service.testMethod();
    }
}

public class Main {

    public static void main(String[] args) {
        Service service = new Service();
        MyThread threada = new MyThread(service);
        MyThread threadb = new MyThread(service);
        MyThread threadc = new MyThread(service);
        MyThread threadd = new MyThread(service);
        MyThread threade = new MyThread(service);
        threada.start();
        threadb.start();
        threadc.start();
        threadd.start();
        threade.start();

    }

}

运行结果

ThreadName =Thread-0----------------------------
ThreadName =Thread-0 1
ThreadName =Thread-0 2
ThreadName =Thread-0 3
ThreadName =Thread-0 4
ThreadName =Thread-0 5
ThreadName =Thread-1----------------------------
ThreadName =Thread-1 1
ThreadName =Thread-1 2
ThreadName =Thread-1 3
ThreadName =Thread-1 4
ThreadName =Thread-1 5
ThreadName =Thread-2----------------------------
ThreadName =Thread-2 1
ThreadName =Thread-2 2
ThreadName =Thread-2 3
ThreadName =Thread-2 4
ThreadName =Thread-2 5
ThreadName =Thread-3----------------------------
ThreadName =Thread-3 1
ThreadName =Thread-3 2
ThreadName =Thread-3 3
ThreadName =Thread-3 4
ThreadName =Thread-3 5
ThreadName =Thread-4----------------------------
ThreadName =Thread-4 1
ThreadName =Thread-4 2
ThreadName =Thread-4 3
ThreadName =Thread-4 4
ThreadName =Thread-4 5

结果分析:

可以看到输出结果没有交替,证明此时各个线程对于lock.lock()和lock.unlock()之间的代码的执行是同步的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值