多线程高并发面试题

如下三种业务,应该如何使用线程池:
1.高并发,任务执行时间短的业务

2.并发不高,任务执行时间长的业务
3.并发高,业务执行时间长的业务
回答:1.高并发,任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文切换
2.并发不高,任务执行长,需要区分:(1)业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以不要让所有CPU空闲下来,可以加大线程池中的数目,让CPU处理更多的业务。
(2)业务时间长集中在计算操作上,就是计算密集型任务,这个就没办法了,可以把线程池中的线程数设置的少一些,减少线程上下文的切换。
3.并发高,业务执行时间长,解决这种类型任务的关键不在于线程池而在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步,至于线程池的设置,可以参考2。最后,业务执行时间长问题,也需要分析看能不能使用中间件对任务进行拆分和解耦。
问:线程池shutdown和shutdownnow的区别,实现原理
答:shutdown(),当线程池调用该方法时,线程池的状态则立刻变成shutdown状态。此时,则不能再往线程池中添加任何任务,否则将抛出rejectedExecutionException异常。但是此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。
shutdownnow(),大致意思是,执行该方法,线程池的状态立刻变成stop状态,并试图停止所有正在执行的线程,不在处理还在池队列中等待的任务,当然,会返回那些未执行的任务。它试图终止线程的方法是通过调用Thread.interrupt()方法来实现的,但是大家都知道,这种方法的作用有限,如果线程池中没有sleep,wait,condition,定时锁等应用,interrupt()方法是无法中断当前的线程的。所以shutdown()并不代表线程池就一定会立即退出,它可能必须要等待所有正在执行的任务都执行完了才能退出。

java并发类库提供的线程池有哪几种,分别有什么特点,在使用时需要注意什么。
通常开发者都是利用executors提供的通用线程池创建方法,去创建不同配置的线程池。主要区别在于不同的executors目前提供了5种不同的线程池创建配置:

1.newCachedThreadPool(),它是一种用来处理大量短时间工作任务的线程池。具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;如果线程闲置的时间超过60秒,则被终止并移出缓存;长时间闲置时,这种线程池,不会消耗什么资源。其内部使用SychronousQueue作为工作队列。
2.newFixedThreadPool(int nThreads),重用指定数目(nThreads)的线程,其背后使用的是无界的工作队列,任何时候最多有nThreads个工作线程是活动的。这意味着,如果任务数量超过了活动队列数目,将在工作队列中等待空闲线程出现;如果有工作线程退出,将会有新的工作线程被创建,以补足指定的数目nThreads。
3.newSingleThreadExecutor(),它的特点在于工作线程数目被限制为1,操作一个无界的工作队列,所以它保证了所有任务都是被顺序执行,最多会有一个任务处于活动状态,并且不允许使用者改动线程池实例,因此可以避免其改变线程数目。
4.newSingleThreadScheduledExecutor()和newScheduledThreadPool(int corePoolSize),创建的是个ScheduledThreadPoolExecutor,可以进行定时或周期性的工作调度,区别在于单一工作线程还是多个工作线程。
5.newWorkStealingPool(int parallelism),这是一个经常被人忽略的线程池,Java 8才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行地处理任务,不保证处理顺序。

项目中有高并发吗,怎么解决,回答:

解决思路从几点出发:1.代码层面,锁优化措施,尽量简化事务和减少事务2.应用层面:缓存,队列,限流,熔断,负载均衡等3.数据库层面:分库分表,读写分离。4.还有一些比如代码中常用到的并发包处理工具中,ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet等。

ThreadLocal

经常会有人一直把threadLocal和ThreadPool搞混,这里重点申明下,ThreadPool是线程池,完全不是一回事哦,线程池干嘛的,可以把它当做是容纳线程的容器,线程池是为突然大量暴增的线程设计的,通过有限的几个固定或者缓存量等线程为大量的线程提供操作服务,减少了创建和销毁所需的时间,提高效率。
threadLocal是什么,从名字看叫做线程变量,意思是threadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,threadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。
2.ThreadLocal怎么用
既然ThreadLocal的作用是每一个线程创建一个副本,我们使用一个例子来验证一下:

public class one {

    public static void main(String[] args) {
        ThreadLocal<String> local=new ThreadLocal<>();
        Random random=new Random();
        //java8的stream
        IntStream.range(0,5).forEach(a-> new Thread(()->{
            //为每一个线程设置相应的local值
            local.set(a+" "+random.nextInt(10));
            System.out.println("线程和local值分别是:"+local.get());
            try {
                TimeUnit.SECONDS.sleep(1);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }).start());
        }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容