17 为什么会有线程?

来源:互联网 发布:九龙朝精灵升级数据 编辑:程序博客网 时间:2024/04/29 10:48

00 为什么要有多线程?

单线程,就是指单个流水线的进程(A→B→C),这样的效率不太高。

多线程,指多个单线程同时进行,效率高。


生活场景:

  1. 购买电脑时,销售人员介绍这台电脑是cpu几核。通常来说,核越多,运行的就越快。单核CPU运行就是单线程,双核CPU就是多线程。

  2. 类似于生活中的行车道,有的车道小,只有一条道,所以容易造成拥挤。如果车道变宽,可以跑多个车道,那么效率就会高很多了。一条道为单线程,多条道为多线程,可以提高效率。


01 多线程的使用

  1. 继承Thread类,new Thread(){}.start(),重写run()方法,使用start()方法

  2. 实现Runnable接口,new Thread(new Runnable() {})。start()

两者的区别:

  • 继承可以直接使用Thread类中的方法,代码简单。弊端:不能实现多继承

  • 实现接口可以在子类继承父类的情况下使用。

02 并行与并发的区别

  • 并行:多个程序共同进行,类似多个水管同时放水。

  • 并发:多个程序依次发送,类似QQ聊天,先给A发消息,让A等着,再给B发消息,依此类推。

03 同步与异步的区别

  1. 同步:进行同一个步骤

    A输入:”我”,”爱”,”编”,”程”

    B输入:”我”,”不”,”爱”,”编”,”程”

    如果A输入和B输入不是同步的,输出时可能会出现”我爱 我不爱编程 编程”。

    如果A输入和B输入是同步的,输出则是”我爱编程 我不爱编程”

    如果某一部分代码块(e.g. A输入/B输入)需要同步进行,则一定要设为同步synchronized/ (wait,notify).

  2. 异步:当调用一个需要花费很长时间来执行的方法,并不希望让程序等待方法返回时,就应该使用异步编程,在很多情况下,采用异步途径往往更有效率。

04 线程池

线程池就是类似于养鱼的池子,每一条鱼都是一个线程,当钓起一条鱼后,钓鱼这个动作就算完成了,而这条鱼当场不会死亡,又可以将这条鱼再放回线程池继续钓。

0 0
原创粉丝点击