java 多线程基础
2020-02-13 12:05 默默不语 阅读(140) 评论(0) 编辑 收藏 举报1.创建新线程
①继承自Thread
将类声明为java.lang.Thread的子类并重写run方法
public class MyThread extends Thread { @Override public void run() { //线程体的执行方法 //线程体 for(int i = 0;i<50;i++) { System.out.println("~~子线程:"+ i); } } }
启动线程,不是调用MyThread.run()函数,而是调用start()函数:
MyThread myThread = new MyThread(); //myThread.run(); //启动线程 myThread.start();
②实现Runnable
定义实现java.lang.Runnable接口的类,Runnable接口中只有一个方法public void run(),用来定义线程运行体:
public class MyRunnable implements Runnable { //实现了Runnable就必须实现run方法,在run方法中执行线程体 @Override public void run(){ for(int i = 0;i<50;i++ ) { System.out.println("runnable子线程:"+ i); } } }
启动线程时,需要创建Thread实例时将这个类的实例作为参数传递到线程实例内部。然后再启劢:
Thread thread = new Thread(new MyRunnable()); thread.start();
实例:使用多线程模拟铁路售票系统,实现5个售票点发售某日某次列车的1000张车票,一个售票点用一个线程表示。
package com.cmq.test; /** *@author chenmeiqi *@version 2020年2月13日 上午9:59:44 */ public class MainTest { public static void main(String[] args) { //第二种线程启动方式 Thread thread1 = new Thread(new MyRunnable()); thread1.setName("售票点1"); Thread thread2 = new Thread(new MyRunnable()); thread2.setName("售票点2"); Thread thread3 = new Thread(new MyRunnable()); thread3.setName("售票点3"); Thread thread4 = new Thread(new MyRunnable()); thread4.setName("售票点4"); Thread thread5 = new Thread(new MyRunnable()); thread5.setName("售票点5"); thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); // } }
package com.cmq.test; /** *@author chenmeiqi *@version 2020年2月13日 上午10:11:38 *Tunnable 线程实现售票问题 */ public class MyRunnable implements Runnable { //实现了Runnable就必须实现run方法,在run方法中执行线程体 private static int ticket = 300; @Override public void run() { //线程体的执行方法 //线程体 while(this.ticket>0) { System.out.println(Thread.currentThread().getName() + ":" + this.ticket--); } } }
注:类属性ticket加static是为了防止数据冲突。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!