并发编程总结

Posted 信小呆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程总结相关的知识,希望对你有一定的参考价值。

1、ABCD四个线程按照是顺序执行的方法要用join().

2、lock锁的用法:

Lock lock = ...;
lock.lock();
try
    //处理任务
catch(Exception ex)

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

这是一个个模板,lock的实现类是ReentrantLock,现在我们来一个简单的demo

public class LockThread 
    Lock lock = new ReentrantLock(); 
    public void lock(String name)   
        // 获取锁  
        lock.lock();  
        try   
            System.out.println(name + " get the lock");  
            // 访问此锁保护的资源  
         finally   
            // 释放锁  
            lock.unlock();  
            System.out.println(name + " release the lock");  
          
      

    public static void main(String[] args) 
        LockThread lt = new LockThread();  
        new Thread(() -> lt.lock("A")).start();  
        new Thread(() -> lt.lock("B")).start();  
    

当然,他的优点可以使读写分离锁,代码安排上

class Queue 
    //共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。
    private Object data = null;

    ReadWriteLock lock = new ReentrantReadWriteLock();

    // 读数据
    public void get() 
        // 加读锁
        lock.readLock().lock();
        try 
            System.out.println(Thread.currentThread().getName() + " be ready to read data!");
            Thread.sleep((long) (Math.random() * 1000));
            System.out.println(Thread.currentThread().getName() + " have read data :" + data);
         catch (InterruptedException e) 
            e.printStackTrace();
         finally 
            // 释放读锁
            lock.readLock().unlock();
        
    

    // 写数据
    public void put(Object data) 
        // 加写锁
        lock.writeLock().lock();
        try 
            System.out.println(Thread.currentThread().getName() + " be ready to write data!");
            Thread.sleep((long) (Math.random() * 1000));
            this.data = data;
            System.out.println(Thread.currentThread().getName() + " have write data: " + data);
         catch (InterruptedException e) 
            e.printStackTrace();
         finally 
            // 释放写锁
            lock.writeLock().unlock();
        

    


public class ReadWriteLockDemo 
    public static void main(String[] args) 
        final Queue queue = new Queue();
        //一共启动6个线程,3个读线程,3个写线程
        for (int i = 0; i < 3; i++) 
            //启动1个读线程
            new Thread() 
                public void run() 
                    while (true) 
                        queue.get();
                    
                

            .start();
            //启动1个写线程
            new Thread() 
                public void run() 
                    while (true) 
                        queue.put(new Random().nextInt(10000));
                    
                
            .start();
        
    

对于其他线程知识还有sleep和wait的区别,sleep就是睡觉还占着床,wait就是你先占那里等一会儿,他会释放锁。

以上是关于并发编程总结的主要内容,如果未能解决你的问题,请参考以下文章

python 复习—并发编程实战——并发编程总结

Java并发总结-全景图

并发编程 - 总结

并发编程总结

并发编程总结

并发编程之学习总结