并发编程总结
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就是你先占那里等一会儿,他会释放锁。
以上是关于并发编程总结的主要内容,如果未能解决你的问题,请参考以下文章