java复习多线程
java复习多线程
1:进程 程序运行的实体
2:线程:进程中运行的一个执行单元,系统运行的最小单位
进程的实现方式 :1.自己定义类继承hread类,就是线程的实体类,创建几个对象就是几个线程
2.实现runnable接口,既然实现了接口,就要重写里面的所有方法,但是这并不是实现了线程,而是给线程了一个内容,也没有开启多线程,还是要在thread中传递线程内容(实现了runnable的实体类)
3.开启多线程,说到底还是用thread类开启多线程,创建几个对象就是几个线程,实现callbale接口和futuretask类,再传递给thread,开启多线程。
2.thread中的的常见方法
1.getName方法 默认获取当前线程的名字。
2.sleep方法 让程序暂停,单位是毫秒。
3.currentthread 获取当前线程。
4.setPriority和getPriority 修改线程优先级和获取线程优先级
5守护线程:当非守护线程结束,守护线程或陆续结束
6.出让线程/礼让线程 交出线程的执行权 线程们重新抢夺cpu的执行权
7.插入线程,将对象的线程插入到另线程之前,调用对象.join方法
3.线程的生命周期
创建-就绪-运行-结束,还有意外阻塞的状态,
注意:就绪和意外间来回横跳
如果是多线程 就绪状态会和运行状态来回横条,若是遇到了sleep方法,会让当前线程睡眠,其他线程会抢夺使用权,当睡眠结束之后,当前线程将会重新抢夺cpu的使用权。
4.同步代码块
同步代码块的方法:利用锁
1.要同步代码块,一定要保证锁的对象唯一且确定,
第一种方法:利用synchronized (锁)的方法,锁对象一般是该类的字节码文件
第二种方法:利用lock锁,调用lock和unlock方法,不过注意要写try-catch-final的形式
对try-catch-finally的理解,try-catch-finally,其中try中的代码可以就是平常书写的业务逻辑的代码,catch是0异常体系中需要捕获的异常,finally是无论如何都要执行的代码
5.死锁
死锁是指调用两把锁从而使得程序运行不下去阻塞的问题
例如:我调用数据库A,进行了同步代码块,又调用数据库B,进行同步代码块,在B中访问A,就会造成死锁现象
6.等待唤醒机制
1.生产者,消费者,中间者
一.生产者生产时,消费者等待,待生产完,唤醒消费者
二。消费者消费时,生产者等待,待消费完,生产者被唤醒
2.阻塞队列是实现
7.线程栈
在java中,堆内存有且只有一个,但一个线程就对应一个线程栈。
8.线程池,定于自定义线程池
获取一个线程池对象
ExecutorService executorService = Executors.newFixedThreadPool(10);
定义一个最大线程数是10;
还可以获取无上限的线程池
ExecutorService executorService = Executors.newCachedThreadPool();
自定义线程池
ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(3,6,60,TimeUnit.SECONDS,new LinkedBlockingDeque<>() ,Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
线程池的策略:1.核心线程没满时,用核心线程,
2.核心线程满了,进入阻塞队列
3.阻塞队列满了,运用临时线程,
4,临时线程满了,采用拒绝策略。

浙公网安备 33010602011771号