会Java并发面试小题在面试中不卡壳
- 发布:达内java编辑01
- 来源:Java职场
- 时间:2018-09-03 15:16
Java并发面试小题在面试中不卡壳,对于技术人员在面试过程张免不了专业知识的笔试题,面如一些陌生端的专业名词你是否有点懵呢?
Java 并发代码
publicclassExample1 {publicstaticint count = 0;publicstaticint clientTotal = 5000;publicstaticvoidmain(String[] args) throws Exception { ExecutorService executorService = Executors.newCachedThreadPool();for (int i = 0; i < clientTotal ; i++) { executorService.execute(() -> {try { add(); } catch (Exception e) {log.error("exception", e); } }); } }privatestaticvoidadd(){ count++; }}如果上面代码执行,count的值是多少?(为了说明重点问题,没有写最后打印的代码)5000?多次运行的结果,count的值是小于5000的。
解释一下上面的程序,首先定义了一个线程池,启动5000个线程执行add()操作,add函数处理静态成员变量count。
如果程序顺序调用,count的值应该是5000。
for(int i=0;i<5000;i++){add();}复制代码但是线程池启动多线程,是并发执行的。每个线程启动之后,不管是否运行结束,下一个线程会马上启动。
启动线程的过程,是一个异步过程,启动线程立即返回,启动下一个进程。
当多个线程对同一个变量add进行操作的时候,就会发生写写冲突。
线程1、线程2 同时对值为0的变量进行操作,结果返回1,而不是2。如果这个地方想不明白,就请留言,或者看看文章顶部那些原理图。
要不简单点,记住“多线程对全局变量的写操作会发生冲突”。
答案,声明原子变量 AtomicInteger count
publicclassCountExample2 {// 请求总数publicstaticint clientTotal = 5000;// 同时并发执行的线程数publicstaticint threadTotal = 200;publicstatic AtomicInteger count = ew AtomicInteger(0);publicstaticvoidmain(String[] args) throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadTotal); final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);for (int i = 0; i < clientTotal ; i++) { executorService.execute(() -> {try { semaphore.acquire();add(); semaphore.release(); } catch (Exception e) { log.error("exception", e); } countDownLatch.countDown(); }); } countDownLatch.await(); executorService.shutdown(); #("count:{}", count.get()); }privatestaticvoidadd() { count.incrementAndGet();// count.getAndIncrement(); }}注,上面的代码用了生成者消费者模式,5000个生产者,200个消费者,对程序并发做一定限制,防止5000个线程卡死计算机。
内存模型,也说点简单的
栈(heap),函数加载的时候,为函数内部变量分配的空间。和父函数的内部变量和运行指针共享同一块区域。
函数运行时,new的空间,都是放在堆中的。
这个就是C的内存模型,做shellcode的基础知识。
来源:纯洁的微笑
感谢大家阅读由Java职场分享的“会Java并发面试小题在面试中不卡壳”希望对大家有所帮助,想了解更多培训信息请关注Java培训机构官网
免责声明:以上内容仅作为信息传播,文中部分信息来源于互联网,仅供阅读参考。
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2024-03-05
2024-02-29
达内就业喜报
更多>Java开班时间
-
北京 丨 12月25日
火速抢座 -
上海 丨 12月25日
火速抢座 -
广州 丨 12月25日
火速抢座 -
兰州 丨 12月25日
火速抢座 -
杭州 丨 12月25日
火速抢座 -
南京 丨 12月25日
火速抢座 -
沈阳 丨 12月25日
火速抢座 -
大连 丨 12月25日
火速抢座 -
长春 丨 12月25日
火速抢座 -
哈尔滨 丨 12月25日
火速抢座 -
济南 丨 12月25日
火速抢座 -
青岛 丨 12月25日
火速抢座 -
烟台 丨 12月25日
火速抢座 -
西安 丨 12月25日
火速抢座 -
天津 丨 12月25日
火速抢座 -
石家庄 丨 12月25日
火速抢座 -
保定 丨 12月25日
火速抢座 -
郑州 丨 12月25日
火速抢座 -
合肥 丨 12月25日
火速抢座 -
太原 丨 12月25日
火速抢座 -
苏州 丨 12月25日
火速抢座 -
武汉 丨 12月25日
火速抢座 -
成都 丨 12月25日
火速抢座 -
重庆 丨 12月25日
火速抢座 -
厦门 丨 12月25日
火速抢座 -
福州 丨 12月25日
火速抢座 -
珠海 丨 12月25日
火速抢座 -
南宁 丨 12月25日
火速抢座 -
东莞 丨 12月25日
火速抢座 -
贵阳 丨 12月25日
火速抢座 -
昆明 丨 12月25日
火速抢座 -
洛阳 丨 12月25日
火速抢座 -
临沂 丨 12月25日
火速抢座 -
潍坊 丨 12月25日
火速抢座 -
运城 丨 12月25日
火速抢座 -
呼和浩特丨12月25日
火速抢座 -
长沙 丨 12月25日
火速抢座 -
南昌 丨 12月25日
火速抢座 -
宁波 丨 12月25日
火速抢座 -
深圳 丨 12月25日
火速抢座 -
大庆 丨 12月25日
火速抢座