基础知识巩固五

多线程

因为CPU的大部分时间都是空闲的,例如,在等待用户输入数据时,CPU什么也不做,多线程可以使程序反应更快、交互性更强、执行效率更高。

实现多线程,可以新建一个类实现Runnable接口,也可以继承Thread类

Thread类的方法有:

  1. Thread()创建空线程
  2. Thread(task:Runnable)为指定任务创建一个线程
  3. start():启动线程,使方法run被JVM调用
  4. isAlive():测试线程当前是否正在运行
  5. setPriority(P:int)
  6. join()
  7. sleep(millisecond )
  8. yield():使线程暂停并允许执行其他的Thread变量,赋值null表明它被停止

当一个休眠线程的interrupt()方法被调用时,会抛出一个异常,不过interrupt()方法极少在线程上被调用

注:如果在一个循环中调用了sleep方法,那就应该将循环放在try-catch块中,否则即使使线程被中断,它也可能继续执行

线程池

管理并发执行任务个数的理想方法

ExecutorService是Executor的子接口

使用ExecutorServise:

ExecutorService executor = Executors.newFixedThreadPool(3);

executor.execute(Runnable object);

executor.shutdown();

创建新线程池的两个方法:

1、newFixedThreadPool(int):创建一个线程数固定不变的线程池

2、创建一个按需创建新线程的线程池

isTerminated():如果线程池中所有任务都被终止,返回true.

java目前支持的三个具体的阻塞队列

1、ArrayBlockingQueue:使用数组实现

2、LinkedBlockingQueue:使用链表实现

3、PriorityBlockingQueue:优先队列

主要要使用的方法有:

1、put(e):将e元素添加到集合中

2、take():将集合中最先的元素取出

 

 

信号量

可以用来限制访问共享资源的线程数

Semaphore(int):创建一个带指定数目许可的信号量,公平策略默认为false

Semaphore(int,boolean):许可数目,公平策略,如果为true,它将会选等待时间最久的线程。

信号量的方法有:

acquire():获取许可

release():释放许可

 

避免死锁的方法

资源排序:给每一个需要锁的对象指定一个顺序,确保每一个线程都按这个顺序来获取锁

Collection类提供留个静态方法来将集合转成同步版本

  1. synchronizedCollection(c:collection):Collection
  2. synchronizedList(list:List):list
  3. synchronizedMap(m:Map):Map
  4. synchronizedSet(s:Set):Set
  5. synchronizedSortedMap(s:SortedMap):sortedMap
  6. synchronizedSoriedSet(s:SortedSet):SortedSet

java.until.concurrent.locks下的接口有:1、Condition   2、Lock   3、ReadWriteLock

ReentrantLock是Lock的实现类:Lock lock = new ReentrantLock()

ReentrantLock有两个构造函数,第一个无参构造函数,代表创建一个fair=false的锁,一个参数的构造方法代表创建具有给定公平策略的锁,参数为boolean类型

Condition将Object监视器方法(wait、notify和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意的lock实现组合使用。

condition的三个主要方法:1、await()    2、signal()   3、signalAll()

Lock的三个主要方法:1、lock()   2、unlock()   3、newCondition()

 

原文地址:https://www.cnblogs.com/shigeng/p/8563436.html