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,临时线程满了,采用拒绝策略。

posted @ 2025-03-13 21:10  懒洋洋血洗青青草原  阅读(16)  评论(0)    收藏  举报