并发-多线程基础

线程与进程的概念,以及线程与进程的区别

  进程:是一个独立的应用程序,每个进程包含一到多个线程
  线程:是指一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,也可以把它理解为代码运行的上下文,
       所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务,通常由操作系统负责多个线程的调度和执行
  使用线程可以把占据时间长的的程序中的任务放到后台去处理,程序的运行速度可能更加快,在一些等待的任务实现上如
       用户输入,文件读写和网络收发数据等,线程就比较有用了
  如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换,更多的线程需要更多的内存空间,所以线程不建议开多,开5个基本就可以 
  总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径    

为什么使用多线程

  同一时刻有多条不同的执行路径同时执行
  使用多线程的目的就是提高程序效率(不会提高程序性能)      

多线程的应用场景

   如:使用下载器同时下载多个文件,数据库连接池,分批发送短信等

多线程同步和异步

同步和异步的区别

多线程状态

   新建状态:当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码在调用start之前
   就绪状态:调用start方法,等待cpu分配执行权
   运行状态:当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.
   阻塞状态: 线程运行过程中,可能由于各种原因进入阻塞状态:
            1>线程通过调用sleep方法进入睡眠状态;
            2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回       到它的调用者;
           3>线程试图得到一个锁,而该锁正被其他线程持有;
           4>线程在等待某个触发条件;

   死亡状态:有两个原因会导致线程死亡:
                    run方法正常退出而自然死亡,
                  一个未捕获的异常终止了run方法而使线程猝死。
                 为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.

多线程状态

多线程的创建方式

第一种继承thread类,重写run、方法
在这里插入图片描述
第二种实现runnable接口,重写run方法
在这里插入图片描述
第三种使用匿名内部类的方式
在这里插入图片描述
使用thread类好还是实现runnable接口好
使用runnable接口好,原因实现了接口还可以继承,继承了类就不能再继承,还有runnable接口的可以放入线程池中,继承的方式无法放入线程池中
启动线程是调用start方法还是调用run方法
开启线程是调用start方法,调用run方法执行实例方法

守护线程与非守护线程

 守护线程:和主线程相关,特征:和主线程一起销毁,当主线程停止,守护进程也会被停止
 用户线程:指用户自定义创建的线程,主线程停止,用户线程停止
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值