美文网首页
多线程之Thread创建

多线程之Thread创建

作者: fit_All | 来源:发表于2021-03-09 15:18 被阅读0次

1.线程与进程 线程 进程之间通信

进程:系统资源分配及调度的最小单位,一个应用就是一个进程、资源分配的最小调度单位。系统开辟独立空间

线程:程序执行的最小单元 线程是基于进程执行,一个进程中可以存在多个线程

2.线程的创建方式

线程的创建一般分为两种 AClass implements Runnable / AClass extends Runnable,除了这两种别无他法。FutureTask和Callable的方式说穿了就是FutureTask implements RunnableFuture,但是呢RunnableFuture实现了Runnable 的接口Callable不要杠~官方文档说的很清楚

A

2.线程生命周期

线程的生命周期分为5种

1.就绪态:新建了线程对象 但是没有执行run方法

2.运行态:Java将就绪态和运行态合并为运行态 当线程对象调用start 即进入线程就绪态,加入线程池,等待CPU时间片轮转调度

3.等待:进入该状态后需要其他线程特定动作(notify notifyAll)

4.等待超时:它在指定时间自动返回

5.阻塞:线程阻塞于锁

6.终止:表示该线程已经执行完毕。

线程生命周期

3.线程问题及解决方式

死锁

 造成死锁的几种方式:

A.互斥条件:资源使用存在排他性 某一资源被当前占有,需要很大时间才能释放,请求者一直等待,直到调用者释放

B:环路等待条件:P0->P1->P2->P0(资源等待顺序)

C:请求和保持条件:获得一些资源,有需要请求其他资源无果,同时自己手里资源不愿意放手

D:不剥夺条件:得到该资源自己使用完才放手,其他请求者无法剥夺

危害

1、线程不工作了,但是整个程序还是活着的2、没有任何的异常信息可以供我们检查。3、一旦程序发生了发生了死锁,是没有任何的办法恢复的,只能重启程序,对正式已发布程序来说,这是个很严重的问题。

总结:多个调用者调用不同的资源顺序不对且争夺到的资源不放手

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。

只要打破四个必要条件之一就能有效预防死锁的发生。

打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。

打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。

打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,这样就不会占有且申请。

打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源。

避免死锁常见的算法有有序资源分配法、银行家算法。

解决方案:打破死锁调用顺序:1.尝试加入拿锁机制 2.内部通过比较确定拿锁顺序 3.算法银行家算法(自动百度) 有序资源分配法(自动百度)

活锁:两个线程在尝试拿锁的机制中,发生多个线程之间互相谦让,不断发生同一个线程总是拿到同一把锁,在尝试拿另一把锁时因为拿不到,而将本来已经持有的锁释放的过程。

解决方案:线程睡眠一个随机数

线程饥饿:线程优先等级过低,无法获得执行时间

相关文章

  • 10.3多线程详解

    Java高级-多线程 多线程创建 多线程通讯 线程池 1.多线程创建 thread/runnable图:继承Thr...

  • Unity3D 多线程

    (一)多线程的创建 Thread A = new Thread(new ThreadStart(Goto));Th...

  • Python 多线程笔记

    Python 多线程笔记 创建线程 1. 使用函数创建多线程 2. 使用类创建多线程 继承 Thread 类 重写...

  • Java的两种多线程实现方式

    一、创建多线程的两种方式 Java中,有两种方式可以创建多线程: 1 通过继承Thread类,重写Thread的...

  • 4 多线程00

    一 多线程的创建 1、thread/runnablethread:继承Thread类runnable:实现Runn...

  • 案例深入分析多线程的两种实现方式

    一、创建多线程的两种方式 Java中,有两种方式可以创建多线程: 1 通过继承Thread类,重写Thread的r...

  • iOS多线程

    iOS多线程 Thread 线程的创建 两种创建线程的方法 。常用属性: name Thread.sleep(fo...

  • 多线程

    多线程 创建与启动 方式1:继承于Thread类 继承Thread类 重写run方法 创建对象 调用start方法...

  • 多线程创建的两种基本方法

    方法1 继承Thread() 继承Thread()类的多线程创建步骤 新建一个类继承 Thread() 类 重写 ...

  • 线程

    一。多线程的创建 1. thread/runnable (1) 继承Thread类 (2)实现Runable接口 ...

网友评论

      本文标题:多线程之Thread创建

      本文链接:https://www.haomeiwen.com/subject/gvzvqltx.html