Java面试知识点:多线程

问题:Java面试知识点:多线程

答案:

1.线程

 代码如下:

package com.xy;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test01* @Author: 杨路恒* @Description:* @Date: 2021/8/25 0025 16:57* @Version: 1.0*/
public class test01 {public static void main(String[] args) {MyThread myThread=new MyThread();MyThread myThread1=new MyThread();myThread.start();myThread1.start();}
}public class test02 {public static void main(String[] args) {MyRunnable mr=new MyRunnable();     //创建了一个参数对象Thread t=new Thread(mr);            //创建了一个线程对象,并把参数传递给这个线程t.start();MyRunnable mr1=new MyRunnable();Thread t1=new Thread(mr1);            //创建了一个线程对象,并把参数传递给这个线程t1.start();}
}public class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("第二种方式启动线程"+i);}}
}public class test03 {public static void main(String[] args) throws ExecutionException, InterruptedException {MyCallable mc=new MyCallable();     //线程开启之后需要执行里面的call方法//可以获取线程执完毕之后的结果,也可以作为参数传递给Thread对象FutureTask<String> ft=new FutureTask<>(mc);Thread t=new Thread(ft);System.out.println(t.getName());t.start();String s = ft.get();System.out.println(s);MyCallable mc1=new MyCallable();     //线程开启之后需要执行里面的call方法//可以获取线程执完毕之后的结果,也可以作为参数传递给Thread对象FutureTask<String> ft1=new FutureTask<>(mc);
//        Thread t1=new Thread(ft,"恒大大");Thread t1=new Thread(ft);t1.start();t1.setName("杨大大");System.out.println(t1.getName());String s1 = ft.get();System.out.println(s);}
}public class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {for (int i = 0; i < 100; i++) {System.out.println("第三种启动线程方式"+i);Thread.sleep(1000);}return "成功";}
}

2.同步代码块、同步方法

代码如下:

public class test04 {public static void main(String[] args) {MyRunnable1 mr=new MyRunnable1();Thread t=new Thread(mr);Thread t1=new Thread(mr);Thread t2=new Thread(mr);t.start();t1.start();t2.start();}}
class MyRunnable1 implements Runnable{private int ticket=100;Object obj=new Object();@Overridepublic void run() {while (true){synchronized (obj){         //同步代码块if (ticket>0){System.out.println(Thread.currentThread().getName()+"卖第"+ticket+"张票");ticket--;}else {return;}}}}
}

package com.xy;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test04* @Author: 杨路恒* @Description:* @Date: 2021/8/26 0026 16:51* @Version: 1.0*/
public class test05 {public static void main(String[] args) {MyRunnable2 mr = new MyRunnable2();Thread t = new Thread(mr);Thread t1 = new Thread(mr);Thread t2 = new Thread(mr);t.start();t1.start();t2.start();}}class MyRunnable2 implements Runnable {private int ticket = 100;Object obj = new Object();@Overridepublic void run() {while (true) {ticket();}}public synchronized void ticket() {if (ticket > 0) {System.out.println(Thread.currentThread().getName() + "卖第" + ticket + "张票");ticket--;} else {return;}}
}

3.原子性、CAS算法

 代码如下:

package com.xy;import java.util.concurrent.atomic.AtomicInteger;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test16原子性* @Author: 杨路恒* @Description:* @Date: 2021/8/29 0029 14:08* @Version: 1.0*/
public class test16原子性 {public static void main(String[] args) {AtomicInteger ac=new AtomicInteger();System.out.println(ac);AtomicInteger ac1=new AtomicInteger(6);System.out.println(ac1);}
}package com.xy;import java.util.concurrent.atomic.AtomicInteger;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test17原子性* @Author: 杨路恒* @Description:* @Date: 2021/8/29 0029 14:10* @Version: 1.0*/
public class test17原子性 {public static void main(String[] args) {AtomicInteger ac=new AtomicInteger(6);System.out.println(ac.get());int i = ac.getAndIncrement();int i1 = ac.incrementAndGet();System.out.println(i);System.out.println(i1);int i2 = ac.addAndGet(6);System.out.println(i2);int i3 = ac.getAndSet(6);System.out.println(i);}
}

4.线程池

 代码如下:

package com.xy;import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test10线程池* @Author: 杨路恒* @Description:* @Date: 2021/8/27 0027 19:54* @Version: 1.0*/
public class test10线程池 {public static void main(String[] args) throws InterruptedException {ExecutorService executorService= Executors.newCachedThreadPool();executorService.submit(()->{System.out.println(Thread.currentThread().getName()+"启动");});Thread.sleep(2000);executorService.submit(()->{System.out.println(Thread.currentThread().getName()+"启动");});Thread.sleep(2000);executorService.shutdown(); }
}public class test13线程池 {public static void main(String[] args) {ThreadPoolExecutor pool=new ThreadPoolExecutor(2,5,2,TimeUnit.SECONDS,new ArrayBlockingQueue<>(10),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());pool.submit(new MyRunnable3());pool.submit(new MyRunnable3());pool.shutdown();}
}public class test14线程池 {public static void main(String[] args) {ThreadPoolExecutor pool=new ThreadPoolExecutor(1,2,2,TimeUnit.SECONDS,new ArrayBlockingQueue<>(1),Executors.defaultThreadFactory(),
//                new ThreadPoolExecutor.AbortPolicy());
//                new ThreadPoolExecutor.DiscardPolicy());
//                new ThreadPoolExecutor.DiscardOldestPolicy());new ThreadPoolExecutor.CallerRunsPolicy());for (int i = 0; i < 5; i++) {int y=i;pool.submit(()->{System.out.println(Thread.currentThread().getName()+":"+y);});}pool.shutdown();}
}

5.阻塞队列

代码如下:

public class test08阻塞队列 {public static void main(String[] args) {ArrayBlockingQueue<String> list=new ArrayBlockingQueue<>(1);Cooker1 c=new Cooker1(list);Foodie1 f=new Foodie1(list);c.start();f.start();}
}public class test09阻塞队列 {public static void main(String[] args) throws InterruptedException {ArrayBlockingQueue<String> list=new ArrayBlockingQueue<>(1);list.put("汉堡包");System.out.println(list.take());}
}public class Cooker1 extends Thread{ArrayBlockingQueue<String> list;public Cooker1(ArrayBlockingQueue<String> list) {this.list = list;}@Overridepublic void run() {while (true){try {list.put("汉堡包");System.out.println("生产者");} catch (InterruptedException e) {e.printStackTrace();}}}
}public class Foodie1 extends Thread{ArrayBlockingQueue<String> list;public Foodie1(ArrayBlockingQueue<String> list) {this.list = list;}@Overridepublic void run() {while (true){try {String take = list.take();System.out.println("消费者");} catch (InterruptedException e) {e.printStackTrace();}}}
}

生产者、消费者:

public class Cooker extends Thread {private Desk desk;public Cooker(Desk desk) {}@Overridepublic void run() {while (true){synchronized (desk.getLock()){if (desk.getCount()==0){break;}else {if (!desk.isFlag()){System.out.println("生产者");desk.setFlag(true);desk.getLock().notifyAll();}else {try {desk.getLock().wait();} catch (InterruptedException e) {e.printStackTrace();}}}}}}
}public class Desk {private boolean flag=false;private int count=100;private final Object lock=new Object();public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public Object getLock() {return lock;}@Overridepublic String toString() {return "Desk{" +"flag=" + flag +", count=" + count +", lock=" + lock +'}';}public Desk(boolean flag, int count) {this.flag = flag;this.count = count;}public Desk() {this(true,100);}
}public class Foodie extends Thread{private Desk desk;public Foodie(Desk desk) {}@Overridepublic void run() {while (true){synchronized (desk.getLock()){if (desk.getCount()==0){break;}else {if (desk.isFlag()){System.out.println("消费者");desk.setFlag(false);desk.getLock().notifyAll();desk.setCount(desk.getCount()-1);}else {try {desk.getLock().wait();} catch (InterruptedException e) {e.printStackTrace();}}}}}}
}package com.xy;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test07生产者消费者* @Author: 杨路恒* @Description:* @Date: 2021/8/27 0027 17:29* @Version: 1.0*/
public class test07生产者消费者 {public static void main(String[] args) {Desk desk=new Desk();Foodie f=new Foodie(desk);Cooker c=new Cooker(desk);f.start();c.start();}
}

6.HashMap、HashTable、ConcurrentHashMap、CountDownLatch、

Semaphore

代码如下:

package com.xy;import java.util.Hashtable;
import java.util.concurrent.ConcurrentHashMap;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test18并发工具类* @Author: 杨路恒* @Description:* @Date: 2021/8/29 0029 18:47* @Version: 1.0*/
public class test20ConcurrentMap {public static void main(String[] args) throws InterruptedException {ConcurrentHashMap<String,String> map=new ConcurrentHashMap<>();Thread t1=new Thread(()->{for (int i = 0; i < 25; i++) {map.put(i+"",i+"");}});Thread t2=new Thread(()->{for (int i = 25; i < 51; i++) {map.put(i+"",i+"");}});t1.start();t2.start();Thread.sleep(1000);for (int i = 0; i < 51; i++) {System.out.println(map.get(i+""));}}
}package com.xy;import java.util.concurrent.CountDownLatch;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test21CountDownLatch* @Author: 杨路恒* @Description:* @Date: 2021/8/30 0030 20:49* @Version: 1.0*/
public class test21CountDownLatch {public static void main(String[] args) {CountDownLatch countDownLatch=new CountDownLatch(3);MotherThread motherThread=new MotherThread(countDownLatch);motherThread.start();ChildThread1 t1=new ChildThread1(countDownLatch);t1.setName("杨大大");ChildThread2 t2=new ChildThread2(countDownLatch);t2.setName("恒大大");ChildThread3 t3=new ChildThread3(countDownLatch);t3.setName("路大大");t1.start();t2.start();t3.start();}
}package com.xy;import java.util.concurrent.Semaphore;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test22Semaphore* @Author: 杨路恒* @Description:* @Date: 2021/8/30 0030 21:07* @Version: 1.0*/
public class test22Semaphore {public static void main(String[] args) {SemaphoreRunnable sr=new SemaphoreRunnable();for (int i = 0; i < 100; i++) {new Thread(sr).start();}}
}
class SemaphoreRunnable implements Runnable{private Semaphore semaphore=new Semaphore(2);@Overridepublic void run() {try {semaphore.acquire();System.out.println("获得了通行证开始行驶");Thread.sleep(2000);System.out.println("归还通行证");} catch (InterruptedException e) {e.printStackTrace();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础科学研究需要哲学滋养

来源&#xff1a;人民网-人民日报 2017年3月28日作者&#xff1a;丘成桐&#xff08;清华大学丘成桐数学科学中心&#xff09;现代科技进步日新月异&#xff0c;不断拓展人类认知和活动的边界&#xff0c;广泛影响社会生产生活的各个方面。比如&#xff0c;高铁、飞机大大方便了…

Java面试知识点:网络编程

问题&#xff1a;Java面试知识点&#xff1a;网络编程 答案&#xff1a; 1.InetAddress 代码如下: package com.xy;import java.net.InetAddress; import java.net.UnknownHostException;/*** ProjectName: day01* Package: com.xy* ClassName: test01* Author: 杨路恒* Des…

游戏+与通用人工智能的实现

算法、算力与场景&#xff0c;是AI研究的关键要素。AI 对数据要求量极大&#xff0c;否则无法达到人类正确识别的程度。自 AlphaGo 一鸣惊人后,越来越多AI 研究团队意识到&#xff0c;游戏是 AI 的绝佳训练场之一。游戏推动科技创新上行一直以来我们很少把活泼轻松的游戏娱乐与…

A Survey on Knowledge Graphs___Representation, Acquisition and Applications.知识图谱综述:表示,获取,应用

知识图谱综述&#xff1a;表示、获取及应用 这是研究生第一篇综述文章&#xff0c;第一次读也是花了好几天的时间。 摘要:人类的知识提供了对世界的一种形式的理解。表征实体之间结构关系的知识图已成为认知和人的智能研究的热门方向。在这个调查中&#xff0c;我们提供了一…

李飞飞划重点的「具身智能」,走到哪一步了?

来源&#xff1a;选自Quanta magazine作者&#xff1a;Allison Whitten编译&#xff1a;机器之心编辑&#xff1a;张倩在前段时间的一篇文章中&#xff0c;李飞飞指出了计算机视觉未来的几个重要方向&#xff0c;其中最重要的一个就是具身智能。她认为&#xff0c;具身智能将成…

基于链接预测和卷积学习的Web服务网络嵌入

Web Service Network Embedding based on Link Prediction and Convolutional Learning 这是我读研的第一篇论文&#xff0c;也是花了好几天的时间。 基于链接预测和卷积学习的Web服务网络嵌入 摘要&#xff1a;为了在许多基本任务中&#xff0c;如基于Web的软件服务聚类、推荐…

芯片光刻路线图

来源&#xff1a;内容来自半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译&#xff1a;SPIE我们所知道的第一个半导体路线图可能是摩尔观察到的&#xff0c;以他为名字的“摩尔定律”预计&#xff0c;芯片的计算能力随着时间的增长呈指数增长。这促使芯片制造…

知识图谱常用指标:MRR、Hits@1、Hits@10、MR

知识图谱常用指标&#xff1a;MRR、Hits1、Hits10、MR 一、MRR MRR的全称是Mean Reciprocal Ranking&#xff0c;其中Reciprocal是指“倒数的”的意思。具体的计算方法如下&#xff1a; 其中是三元组集合&#xff0c;是三元组集合个数&#xff0c;是指第个三元组的链接预测排名…

科学创新四十年,我们可能还没搞明白科学和技术的基本概念

来源&#xff1a;澎湃新闻智库报告栏目撰文&#xff1a;周路明&#xff08;源创力离岸创新中心负责人&#xff0c;深圳市科协原主席&#xff09;中国系统推进科学和技术发展的工作始于改革开放&#xff0c;至今已经40余年。中国官方和民间发展科学和技术的热情在世界范围内都屈…

Python:Tensorflow中两个稀疏张量相乘

Python&#xff1a;Tensorflow中两个稀疏张量相乘 博主在想让两个稀疏张量进行相乘时&#xff0c;发现不能用tf.matmul、tf.sparse_matmul、tf.sparse_tensor_dense_matmul&#xff0c;看来tf内置的没有对两个SparseTensor相乘的函数&#xff0c;于是&#xff0c;我在网上找了相…

超越Yann LeCun:世界模型的学习和推理

来源&#xff1a;CreateAMind节选第二节&#xff0c;约4000字摘要了解大脑中的信息处理并创造通用人工智能是全世界科学家和工程师的长期愿望。人类智能的显着特征是在与包括自我在内的世界的各种互动中的高级认知和控制&#xff0c;这些不是预先定义的&#xff0c;而是随着时间…

有了这个标准,你就知道和你聊天的AI是什么水平了

来源&#xff1a;AI前线编辑&#xff1a;刘燕InfoQ 获悉&#xff0c;6 月 28 日&#xff0c;由清华大学计算机教授、智能技术与系统实验室副主任黄民烈发起&#xff0c;联合了十余家科研机构、二十多位知名学者共同制定的全球首个《AI 对话系统分级定义》&#xff08;以下简称《…

UCL汪军专访:从生命体决策出发,探索智能决策的安全与风险

来源&#xff1a;智源社区整理&#xff1a;沈磊贤编辑&#xff1a;李梦佳导读&#xff1a;我们的日常生活中无时无刻不涉及到决策&#xff0c;如果说感知智能是从观察到发现规律的过程&#xff0c;那么决策智能就是从规律再返回到感知世界&#xff0c;进而改变数据的过程。这样…

课程设计-毕业设计-JAVA画板课程设计---总之岁月漫长,然而值得等待。

在校大学生的一份辛苦劳动成果写了一个小画板程序。 任务书... 1 1.1设计内容... 1 1.2设计任务及具体要求... 1 1.3软件开发运行环境.. 1 2 本组课题... 1 2.1课题... 1 2.2本人任务... 2 3 程序功能简介... 2 1.画板具体功能.. 2 2.功能分析&#xff1a;... 2 …

忆阻器取代晶体管?时间问题!

来源&#xff1a;悦智网1947年&#xff0c;贝尔实验室发明了晶体管&#xff0c;开创了一个电子设备的时代&#xff0c;电子设备比体积庞大、易碎的真空管电子设备更小、运行更冷、功耗更低。晶体管用作二进制开关&#xff0c;以促进电流从关闭状态变为开启状态。收音机、计算器…

可微硬件:AI将如何重振摩尔定律的良性循环

来源&#xff1a;OneFlow撰文&#xff1a;吕坚平本文阐述了当今AI硬件渊源&#xff0c;跳脱过去芯片设计窠臼&#xff0c;以可微分GPU及可微分ISP为例&#xff0c;提倡以AI为本的可微分硬件理念。希望借此可重振软硬件彼此加持的雄风&#xff0c;缓解甚至逆转摩尔定律的衰退。据…

2nm就靠它了!ASML加速研发新一代光刻机:更贵、更强

来源&#xff1a;万物智能视界用于生产 2nm 芯片的 ASML 新款光刻机预计在 2025 年首次投入使用&#xff0c;对芯片厂商而言&#xff0c;“2nm 工艺战”已经打响。ASML 冲刺 0.55 NA EUV 光刻机对于芯片厂商而言&#xff0c;要想发展先进制程&#xff0c;光刻机是关键设备。而从…

中国机器人产业图谱(2022)

来源&#xff1a;阿里云加速器与行行查研究中心编辑&#xff1a;蒲蒲当前中国机器人产业呈现良好发展势头&#xff0c;产业规模快速增长&#xff0c;“十三五”以来年均复合增长率约为15%&#xff1b;产业格局不断优化&#xff0c;以智能制造、智慧服务为使命与愿景的机器人企业…

全球十大半导体企业,美国独占七席

来源&#xff1a;芯师爷想要了解半导体行业&#xff0c;就永远绕不开一个国家&#xff1a;美国。作为半导体的重要发源地&#xff0c;美国成功确立了芯片市场的“老大”地位。根据IC Insights的芯片市场研究报告&#xff0c;2021年美国企业占据了全球芯市场总销售额的54%&#…

【前沿技术】AI终于攻陷了数学领域!高数考试超过普通博士??

来源&#xff1a;智能研究院高数考不好&#xff0c;不知道是多少人的噩梦。如果说你高数考得还不如AI好&#xff0c;是不是就更难以接受了&#xff1f;没错&#xff0c;来自OpenAI的Codex已经在MIT的7门高数课程题目中正确率达到81.1%&#xff0c;妥妥的MIT本科生水平。课程范围…