基础知识巩固五
多线程:
因为CPU的大部分时间都是空闲的,例如,在等待用户输入数据时,CPU什么也不做,多线程可以使程序反应更快、交互性更强、执行效率更高。
实现多线程,可以新建一个类实现Runnable接口,也可以继承Thread类
Thread类的方法有:
- Thread()创建空线程
- Thread(task:Runnable)为指定任务创建一个线程
- start():启动线程,使方法run被JVM调用
- isAlive():测试线程当前是否正在运行
- setPriority(P:int)
- join()
- sleep(millisecond )
- 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类提供留个静态方法来将集合转成同步版本
- synchronizedCollection(c:collection):Collection
- synchronizedList(list:List):list
- synchronizedMap(m:Map):Map
- synchronizedSet(s:Set):Set
- synchronizedSortedMap(s:SortedMap):sortedMap
- 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()