线程

https://blog.csdn.net/cmyperson/article/details/79610870


什么是线程?

一个运行的程序叫进程,例如qq,微信;线程就是一个进程中的执行单位,比如用QQ 发起聊天的一系列操作就是QQ中的多个线程。可以使用多线程对进程进行提速操作;比如一个线程完成一个工作需要100ms,10个线程只需要10ms。

什么是多线程?

多线程:是指从软件或者硬件上实现多个线程的并发技术。

多线程的好处:

使用多线程可以把程序中占据时间长的任务放到后台去处理,如图片、视屏的下载
发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好

多线程的缺点:

大量的线程降低代码的可读性;
更多的线程需要更多的内存空间
当多个线程对同一个资源出现争夺时候要注意线程安全的问题。

什么是线程安全和线程不安全?

线程安全:
  就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全:
  就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 Vector 是用同步方法来实现线程安全的, 而和它相似的ArrayList不是线程安全的。 线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。 通俗的说:加锁的就是是线程安全的,不加锁的就是是线程不安全的。

Java的堆和栈?

java堆(Java Heap)
    Java堆是被所有线程共享,是Java虚拟机所管理的内存中最大的一块 Java堆在虚拟机启动时创建
    Java堆唯一的目的是存放对象实例,几乎所有的对象实例和数组都在这里
    Java堆为了便于更好的回收和分配内存,可以细分为:新生代和老年代(在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象)
java栈(stack)
    由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。
    每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

ThreadPool(线程池)用法与优势?

ThreadPool 优点
    减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务
    可以根据系统的承受能力,调整线程池中工作线 线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)
    减少在创建和销毁线程上所花的时间以及系统资源的开销
    如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存

Java提供的四种线程池的好处在于:
    重用存在的线程,减少对象创建、销毁的开销,提高性能。
    可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
    提供定时执行、定期执行、单线程、并发数控制等功能。

 

posted on 2019-01-06 14:27  荆棘Study  阅读(123)  评论(0编辑  收藏  举报