我是靠谱客的博主 冷艳战斗机,这篇文章主要介绍大数据知识点梳理-Java多线程6.2 Java多线程,现在分享给大家,希望可以做个参考。

6.2 Java多线程


6.2.1进程和线程的区别是什么?

进程是执行着的应用程序,而线程是进程内部的一一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。


6.2.2 *创建线程有几种不同的方式?你喜欢哪一种?为什么?

有三种方式可以用来创建线程:
➢继承 Thread类
➢实现 Runnable接口
➢应用程序可以使用Executor框架来创建线程池

      实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。


6.2.3概括的解释下线程的几种可用状态。

线程在执行过程中,可以处于下面几种状态:

  • 就绪(Runnable):线程准备运行,不一定立马就能开始执行。
  • 运行中(Running):进程正在执行线程的代码。
  • 等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
  • 睡眠中(Sleeping):线程被强制睡眠。
  • I/O阻塞(Blocked on IO):等待I/O操作完成。
  • 同步阻塞(Blocked on Synchronization):等待获取锁。
  • 死亡(Dead):线程完成了执行。

 

6.2.4同步方法和同步代码块的区别是什么?

      在Java语言中,每一个对象有- -把锁。线程可以使用synchronized关键字来获取对象.上的锁。synchronized 关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。

 

6.2.5请你谈谈关于Synchronized和lock

      synchronized是Java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。JDK1.5 以后引入了自旋锁、锁粗化、轻量级锁,偏向锁来有优化关键字的性能。
      Lock是一个接口,而synchronized是Java中的关键字,synchronized 是内置的语言实现; synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock0去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally 块中释放锁; Lock可以让等待锁的线程响应中断,而synchronized 却不行,使用synchronized 时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。

 

6.2.6 *解释一下什么是线程池? Java 自带有哪几种线程池?

      在面向对象编程中,创建和销毁对象是很费时间的,因为创建一一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每-一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一一个手段就是尽可能减少创建和销毁对象的次数,特别是--些很耗资源的对象创建和销毁,这就是”池化资源”技术产生的原因。线程池顾名思义就是事先创建若干个
可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
 

      Java通过Executors 提供四种线程池,分别为:
(1)newCachedThreadPool
      创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:
工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger.MAX_ VALUE), 这样可灵活的往线程池中添加线程。如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建-一个工作线程。在使用CachedThreadPool时,一定 要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。
(2)newFixedThreadPool
      创建一个指定工作线程数量的线程池。每当提交一个任 务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。

(3) newSingleThreadPool
创建一个单线程化的Executor,即只创建唯一 的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO,优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。
(4)newScheduleThreadPool
创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。延迟3秒执行。
 

 

最后

以上就是冷艳战斗机最近收集整理的关于大数据知识点梳理-Java多线程6.2 Java多线程的全部内容,更多相关大数据知识点梳理-Java多线程6.2内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部