当前位置: 代码网 > it编程>编程语言>Java > java中多线程加锁的四种方式

java中多线程加锁的四种方式

2024年11月03日 Java 我要评论
在java中,多线程加锁的方式主要有以下几种:1. 使用synchronized关键字synchronized可以用于方法或代码块,确保只有一个线程能访问被锁定的代码。方法锁class synchro

在java中,多线程加锁的方式主要有以下几种:

1. 使用synchronized关键字

synchronized可以用于方法或代码块,确保只有一个线程能访问被锁定的代码。

方法锁

class synchronizedmethod {
    public synchronized void synchronizedmethod() {
        system.out.println("synchronized method executed by " + thread.currentthread().getname());
    }
}

代码块锁

class synchronizedblock {
    private final object lock = new object();

    public void synchronizedblock() {
        synchronized (lock) {
            system.out.println("synchronized block executed by " + thread.currentthread().getname());
        }
    }
}

2. 使用reentrantlock类

reentrantlockjava.util.concurrent.locks包中的一种锁,具有比synchronized更灵活的锁定机制。

import java.util.concurrent.locks.reentrantlock;

class reentrantlockexample {
    private final reentrantlock lock = new reentrantlock();

    public void lockmethod() {
        lock.lock();
        try {
            system.out.println("reentrantlock method executed by " + thread.currentthread().getname());
        } finally {
            lock.unlock();
        }
    }
}

3. 使用读写锁(readwritelock)

readwritelock允许多个读线程同时访问共享资源,但在写线程访问时,阻止其他线程的读和写访问。

import java.util.concurrent.locks.readwritelock;
import java.util.concurrent.locks.reentrantreadwritelock;

class readwritelockexample {
    private final readwritelock readwritelock = new reentrantreadwritelock();

    public void readmethod() {
        readwritelock.readlock().lock();
        try {
            system.out.println("read lock method executed by " + thread.currentthread().getname());
        } finally {
            readwritelock.readlock().unlock();
        }
    }

    public void writemethod() {
        readwritelock.writelock().lock();
        try {
            system.out.println("write lock method executed by " + thread.currentthread().getname());
        } finally {
            readwritelock.writelock().unlock();
        }
    }
}

4. 使用信号量(semaphore)

semaphore是一种计数信号量,可以限制同时访问某个资源的线程数量。

import java.util.concurrent.semaphore;

class semaphoreexample {
    private final semaphore semaphore = new semaphore(2); // 允许最多两个线程访问

    public void accessresource() {
        try {
            semaphore.acquire();
            system.out.println("accessing resource by " + thread.currentthread().getname());
            thread.sleep(1000); // 模拟工作
        } catch (interruptedexception e) {
            e.printstacktrace();
        } finally {
            semaphore.release();
        }
    }
}

总结

  • synchronized是 java 内置的关键字,易于使用,但灵活性不足。
  • reentrantlock提供了更强大的锁控制能力,如可重入锁、超时锁。
  • readwritelock允许更高效地处理读写操作,适用于读多写少的场景。
  • semaphore可以控制访问资源的线程数量,适合有限资源的场景。

这些加锁机制可以帮助你在多线程环境中实现线程安全的访问

到此这篇关于java中多线程加锁的四种方式的文章就介绍到这了,更多相关java 多线程加锁内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com