2020高级java面试题之线程

1.线程基础

cpu按照资源分配方法分为:分时调度,每个线程占用同样时间;还有个是抢占式调度,按照优先级进行。java使用的是抢占式。

线程是指进程中的一段处理程序。进程是指一个应用程序在cpu中进行单元。

2.什么是多线程?

实现一个以上的程序段的线程,是多线程。多线程实现并发处理,提升CPU的使用率,从而提升处理性能。

现在操作系统都支持并发处理,即多线程。但运行速度都很快且切换频繁,所以多个应用程序看起来都在同时执行。

多线程的五大状态:新建new;可运行runnable(被调用start方法,等待执行);运行running;堵塞blocked(等待堵塞wait方法,等待notify调用;同步堵塞,在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中;其他堵塞:Thread.sleep,t.join导致的超时后放入runnable);死亡Dead。

3.创建线程方法

1⃣️继承Thread类,

重写run方法,方法要写的程序,后调用start方法,来启动该线程,且让jvm调用run方法执行里面程序。

2⃣️继承runnable接口

实现run方法,创建对象后传给Thread类构参对象后,进行调用start方法。

好处:避免单继承,同时减少对象和方法的耦合性。

4.多线程的内存运行机制

多线程执行时,在栈内存中,每一个执行线程都有自己所属的栈内存空间,进行方法的压栈和弹栈。一般都从mian方法(主线程开始),后启动其他线程,则创建一块栈区域。

当执行线程的任务结束,线程自动在栈内存中释放。当所有的执行线程结束,进程也结束。

5.线程池

线程池上多线程的一个容器,帮助管理线程的生命周期。

在创建销毁线程的消耗很大,比发送请求和处理用户请求的时间可能要多。每次jvm会在线程任务结束后,会自动释放内存。而如此反复创建的过程会浪费很多资源。

创建线程对象后,可重复利用,管理其生命周期,对于重复线程不会很快销毁,从而避免重复创建节省资源。

参考链接图:https://www.cnblogs.com/jmsjh/p/7762034.html

6.线程池的创建

线程池一般都是通过工厂类Executors来创建的,常用方法有:

newcachedTreadPool:无界线程池;newFixedThreadPool有界线程池;newSingleThreadExecutor:单一线程池,以队列方式来执行任务;newScheduledThreadPool:定时线程池;corePoolSize线程池核心数量;maximumPoolSize最大数量;keepAliverTime当活跃线程数>核心线程数时,空闲的多余线程最大存活时间;workQueue存放任务的队列。

线程池会不断从workqueue获取任务到线程池执行,当workqueue为空,则堵塞等待。

Callable接口和Runnable接口方式来实现线程池的线程调用;Callable的call方法可返回执行异常。

例:

ExecutorService service = Executors.newFixedThreadPool(2);//包含2个线程对象

MyCallable c = new MyCallable(); / MyRunnable r = new MyRunnable();

service.submit(c/r);

service.submit(c/r);

service.submit(c/r);

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值