Semaphore类相关总结

Semaphore的使用大致是对Synchronize的增强,控制执行的线程数
public class SemaphoreDemo {
    public static void main(String[] args) throws InterruptedException {
        Semaphore semaphore = new Semaphore(1);
        ExecutorService pool = Executors.newFixedThreadPool(10);
        int i = 10;
        do {
            pool.execute(() -> doSomething(semaphore));
            i--;
        } while (i != 0);
        Thread.sleep(50000);
    }

    private static void doSomething(Semaphore semaphore)  {
        try {
            semaphore.acquire();
            System.out.println("开始执行");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            System.out.println("结束执行");
            semaphore.release();
        }
    }
}

实现Synchronize的功能,并且在初始化Semaphore的时候可以设置并发量。

内部实现:Sync类继承的AQS

 

在C#中,有多种方法和可以实现并发编程,以下是一些常用的相关和技术: 1. 多线程编程: - Thread :用于创建和控制线程的基本。 - ThreadPool :用于管理线程池,可以重用线程以提高性能。 - Task :用于创建和管理异步操作的任务。 - Parallel :提供了一组静态方法,用于并行执行循环、迭代和任务。 2. 同步和互斥: - Monitor :提供了一种基于锁的同步机制,用于保护共享资源的访问。 - Mutex :提供了一种系统级别的互斥锁,用于同步跨进程的线程访问。 - Semaphore :提供了一种计数信号量,用于控制对特定资源的访问。 3. 并发集合: - ConcurrentQueue、ConcurrentStack、ConcurrentBag :线程安全的队列、栈和无序集合。 - ConcurrentDictionary :线程安全的字典。 4. 并行 LINQ(PLINQ):使用并行化技术对 LINQ 查询进行并行执行,提高查询性能。 5. 异步编程:使用 async/await 关键字结合 Task 和 Task<T> 来实现异步操作,并避免阻塞主线程。 6. 并发设计模式:例如生产者消费者模式、读写锁模式、信号量模式等,用于解决特定的并发编程问题。 在并发编程中,需要注意线程安全性和竞态条件等问题,使用适当的同步机制和并发来保护共享资源的访问。此外,正确处理异常和避免死锁等问题也是并发编程中需要考虑的重要方面。 总结: C#提供了多种和技术来实现并发编程,包括多线程编程、同步和互斥、并发集合、并行 LINQ、异步编程等。通过这些和技术,可以有效地管理线程、保护共享资源,并提高程序的并行性和性能。在并发编程中,需要注意线程安全性和竞态条件等问题,并采用适当的设计模式和同步机制来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值