美文网首页
线程相关

线程相关

作者: 菜鸟程序员一枚 | 来源:发表于2019-01-20 15:12 被阅读26次

1.创建线程的方式?
通过runnable和Thread

2.Thread类中的start()和run()方法有什么区别?
大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答,如果你知道Java不支持类的多重继承,但允许你调用多个接口。

3.Java中Runnable和Callable有什么不同?
Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5增加的。它们的主要区别是Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。

4.四种线程池
newCacheThreadPool
可缓存线程池,如果超长可以灵活回收线程,如果不可以回收就新建线程
newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
newScheduledThreadTool
创建一个定长线程池,支持定时及周期性任务执行
newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

5.线程池拒绝策略
AbortPolicy(堕胎政策):后面的线程直接丢弃并且抛出异常
DiscardPolicy(丢弃政策):后面的线程直接丢弃但是不抛出异常
DiscardOldestPolicy(丢弃最早的线程):队列中最早的元素移除,再尝试添加,如果失败则按该策略不断尝试
CallerRunsPolicy:如果添加失败,那么主线程会调用自己执行器中的execute方法来执行该任务

6.notify,notifyAll区别?
notify:唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程;
notifyAll:唤醒所有正在等待这个对象的monitor的线程;
只能在同步代码块中调用

6.wait,sleep区别?
当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
调用sleep()方法的过程中,线程不会释放对象锁

7.submit()和execute()的区别
execute(Runnable x) 没有返回值。可以执行任务,但无法判断任务是否成功完成。——实现Runnable接口
submit(Runnable x) 返回一个future。可以用这个future来判断任务是否成功完成。——实现Callable接口

8.线程池底层原理
用户通过submit提交一个任务。线程池会执行如下流程:
1.判断当前运行的worker(线程)数量是否超过corePoolSize,如果不超过corePoolSize。就创建一个worker直接执行该任务。——线程池最开始是没有worker在运行的
2.如果正在运行的worker数量超过或者等于corePoolSize,那么就将该任务加入到workQueue队列中去。
3.如果workQueue队列满了,也就是offer方法返回false的话,就检查当前运行的worker数量是否小于maximumPoolSize,如果小于就创建一个worker直接执行该任务。
4.如果当前运行的worker数量是否大于等于maximumPoolSize,那么就执行RejectExecutionHandler来拒绝这个任务的提交。

相关文章

  • android linux pThread使用

    线程的相关方法 方法前缀相关功能pthread_线程本身和各种相关函数pthread_attr_线程属性对象pth...

  • iOS面试进阶篇(二)

    目录 UITableViewCell相关试题多线程相关试题进程与线程相关试题网络相关试题TCP与UDPTCP连接的...

  • 线程相关

    1.线程创建 继承Thread 实现Runnable接口 实现callable接口 1.1继承Thread 说下静...

  • 线程相关

    线程池:1.共有四种:Executors 2.改线程设置优先级: 3.AsyncTask的使用:线程优先级为bac...

  • 线程相关

    线程和进程有什么区别? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个...

  • 线程相关

    1、线程状态 NEW 新建状态,线程创建且没有执行start方法时的状态 RUNNABLE 可运行状态,线程已经启...

  • 线程相关

    1、用多线程的目的是什么? 充分利用cpu资源,并发做多件事 2、单核cpu机器上适不适合用多线程? 适合,如果是...

  • 线程相关

    1.创建线程的方式?通过runnable和Thread 2.Thread类中的start()和run()方法有什么...

  • 线程相关

  • 2020-07-28JDK5.0之后新增的创建多线程的方式2

    新增方式二:使用线程池 线程池相关API JDK 5.0起提供了线程池相关API:ExecutorService ...

网友评论

      本文标题:线程相关

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