JAVA实现多线程入门
1:程序员可以在程序中执行多个线程,每一个线程完成一个功能,并于其他线程并发执行,这种机制被称为多线程
2:实现线程的两种方法是,分别是继承java.lang.Thread或者实现java.lang.Runnable接口
3:Thread类是java.lang包中的一个类,从这个类实例化的对象代表线程
4:完成线程真正功能的代码是放在run()方法中的,当一个类继承Thread类后,就可以在该类中覆盖run()方法,将实现该线程功能的代码写入run()方法中,然后同时调用Thread 类中的strat()方法执行线程,也就是调用run()方法。
1 package com.thread; 2 /** 3 * 1:程序员可以在程序中执行多个线程,每一个线程完成一个功能,并于其他线程并发执行,这种 4 * 机制被称为多线程 5 * 2:实现线程的两种方法是,分别是继承java.lang.Thread或者实现java.lang.Runnable 6 * 接口 7 * 3:Thread泪时java.lang包中的一个类,从这个类实例化的对象代表线程 8 * 4:完成线程真正功能的代码是放在run()方法中的,当一个泪继承Thread类后,就可以 9 * 在该类中覆盖run()方法,将实现该线程功能的代码写入run()方法中,然后同时调用Thread 10 * 类中的strat()方法执行线程,也就是调用run()方法。 11 * @author biexiansheng 12 * 13 */ 14 public class ThreadTest extends Thread {//指定类继承Thread类 15 16 private int count=10; 17 public void run(){//重写run()方法 18 while(true){ 19 System.out.print(count+" ");//打印count变量 20 if(--count==0){//使count变量自减,当自减为0时,退出循环 21 return; 22 } 23 } 24 } 25 public static void main(String[] args) { 26 //new ThreadTest().start(); 27 Thread t=new ThreadTest();//两种方法都可以实现线程运行 28 t.start(); 29 } 30 }
示例如下
1 package com.thread; 2 /** 3 * 1:多线程实例练习 4 * @author biexiansheng 5 * 6 */ 7 public class ThreadTest1 extends Thread{ 8 9 //多线程的实现都是在run()方法中实现的 10 public void run(){ 11 System.out.println(getName()+"登上舞台"); 12 int count=0;//定义一个变量 13 while(count<=100){ 14 System.out.println(getName()+"登上"+count+"次舞台"); 15 count++; 16 if(count%10==0){ 17 try { 18 Thread.sleep(2000);//捕获异常,休眠2秒 19 } catch (InterruptedException e) { 20 // TODO Auto-generated catch block 21 e.printStackTrace(); 22 }// 23 } 24 } 25 System.out.println(getName()+"走下舞台"); 26 } 27 public static void main(String[] args) { 28 // TODO Auto-generated method stub 29 Thread t=new ThreadTest1(); 30 t.setName("Mr.Thread"); 31 t.start(); 32 //new ThreadTest1().start(); 33 34 //实现Runnable接口 35 Thread t1=new Thread(new RunnableTest(),"Ms.Runnable"); 36 t1.start(); 37 } 38 } 39 40 class RunnableTest implements Runnable{ 41 //写完上一句,类名报错,说明实现一个接口,就要实现这个接口内的方法 42 @Override 43 public void run() { 44 // TODO Auto-generated method stub 45 System.out.println(Thread.currentThread().getName()+"走上了舞台"); 46 //Runnable接口实现getName必须通过线程的currentThread()方法得到 47 int count=0;//定义一个变量 48 while(count<=100){ 49 System.out.println(Thread.currentThread().getName()+"登上"+count+"次舞台"); 50 count++; 51 if(count%10==0){ 52 try { 53 Thread.sleep(2000);//捕获异常,休眠2秒 54 } catch (InterruptedException e) { 55 // TODO Auto-generated catch block 56 e.printStackTrace(); 57 }// 58 } 59 } 60 System.out.println(Thread.currentThread().getName()+"走下舞台"); 61 62 } 63 64 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?