1、java多线程就是在一个jvm进程中,开启不同线程去处理独立的任务。
2、进程可以看作是一个独立的程序,比如听歌软件、游戏软件等,线程就是软件里不同的操作功能。
3、多线程的实现主要有三种:
实现Thread类
实现Runable接口
实现Callable接口
4、开启线程要用.start()方法
5、线程的状态可分为:新建--可运行--运行--阻塞、等待、睡眠--死亡
6、线程的同步,是在多线程环境下防止同时对与一个数据对象操作,对数据造成破坏。
7、死锁:当两个或多个线程进入相互等待对方释放锁时,就有可能进入死锁状态
8、线程的休眠可以用Thread.sleep(毫秒);方法实现,记得要处理异常。
9、线程的优先级就是越高,抢夺CPU时间片的机会越大,从1到10,越高越优先,默认为5.
可以用t1.setPriority(10);方法设置
10、线程的让步yield()方法,会重新到可运行状态。
11、线程的合并,可以用jion()方法加入当前线程,当前线程挂起等待其执行完。
12、守护线程:setDaemon(true)可将线程设置为守护线程。
13、线程的同步,可以使用synchronized关键字,只能用在非抽象的方法上,不能用在成员变量上
14、volatile关键字也可以保证同步,但是性能较差。
15、线程池:java的Executors类中有大量的关于线程池的方法。
Executors.newFixedThreadPool(2);可重用的固定大小的线程池,2个线程。
Executors.newCachedThreadPool();可变尺寸的线程池。
Executors.newScheduledThreadPool(2).execute(t1线程);再.schedule(t2线程,12,秒);延迟线程池,意思就是在给定的延迟任务后执行。
Executors.newSingleThreadExecutor();单任务线程池,以无界队列来运行。
16、障碍器:只有所有子任务都执行完了,再来执行主任务。
CyclicBarrier cy = new CycleBarrier(3,new MainTask());
当3个子线程任务都完成后再执行Main任务,要在子线程中通知主线程它做完了,用cy.await()方法。