java线程与并发(一)
有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识。希望这次能一直坚持下去。
想了解并发,必须要先知道一些线程的知识,所以前面几篇还是先写一点Java线程的东西。
什么是线程?这又需要从操作系统说起了。我们在windows中打开任务管理器,就可以查看进程的数量,而一个进程就代表了一个运行的程序。
而在一个进程中,又有很多的线程,他们分管着这个程序的各个小部分。
所以:
一个进程拥有多个线程
一个线程只属于一个进程
而在java中实现多线程有两个方式:
一、继承Thread类
二、实现Runnable接口
首先看下Thread类
Thread类在java.lang包中 ,所以不需要刻意的improt,一个类只要继承了这个类,这个类就会成为多线程操作类。
在Thread类中一定要覆写run()方法,这个方法也是线程的主体
在主程序中,如果希望run()当中的方法并发调用,需要调用thread类中的start()方法这个方法就是多线程调用run()方法中的代码。如果程序中同一个类多次调用start()方法可能会引发异常。
class MyThread extends Thread{ private String name; public MyThread(String name){ this.name=name; } public void run(){ for(int i=0;i<10;i++){ System.out.println(name+"线程"+i); } } } public class MyThreadDemo{ public static void main(String args[]){ MyThread m1=new MyThread("A"); MyThread m2=new MyThread("B"); m1.start(); m2.start(); } }
输出:
A run 0 B run 0 A run 1 B run 1 A run 2 B run 2 A run 3 B run 3 A run 4 B run 4 A run 5 B run 5 A run 6 B run 6 A run 7 B run 7 A run 8 B run 8 A run 9 B run 9
再来看下Runnable接口
在这个接口中只定义了一个方法
Public void run();
一个类实现了Runnable 接口之后,同样也会成为一个多线程操作类
但是在Runnable接口中没有start()方法,所以如果一个实现了Runnable类的方法如果希望实现多线程操作,需要借助于Thread类
在thread类中有这么一个构造方法
Public Thread(Runnable target)
MyThread mt=new MyThread(“thread1”); Thread t1=new Thread(mt); t1.start();
由此也可以看出这个Thread类是实现了Runnable接口的类
使用Thread类无法达到资源共享的目的,而使用Runnable接口就可以了。
因为我们可以让一个实现了Runnable接口的类多次被实例化为一个Thread类。
MyThread mt=new MyThread(“thread1”); New Thread(mt).run(); New Thread(mt).run(); New Thread(mt).run();
所以Runnable接口比thread类使用的次数更多一点。
总之,在java中通过Thread类或者runnable接口就可以使用多线程编程了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?