爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Java多线程-Lesson02

      首页 知识中心 软件开发 文章详情页

      Java多线程-Lesson02

      2023-06-30 08:29:14 阅读次数:82

      Java,线程

      一.Lamda表达式

      λ是希腊字母表的第十一位字母,英文名是Lambda

      Lamda表达式的出现主要是为了避免匿名内部类过多的原因,它属于函数式编程的范畴 

      为什么要使用Lamda表达式?

      • 避免匿名内部类定义过多
      • 可以让你的代码看起来很简洁
      • 去掉了没有意义的代码,只留下一堆核心逻辑

      主要使用在创建的类只使用了一次时,创建匿名方法太多会很麻烦,Lamda表达式以其简洁的定义方式使得在类的一次使用中十分高效,在JDK1.8开始广泛使用

      Lamda表达式和函数式接口编程是相辅相成的,只有使用函数式编程才使得Lamda表达式变得有意义

      函数式接口的意义:

      • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口(Runnable接口)
      • public interface Runnable {
            public abstract void run();
        } 
      • 对于函数式接口,我们可以通过Lamda表达式来创建接口对象

      一次使用类的定义演化过程

      1.接口-实现类

      interface iLambda{
          //接口中默认就是抽象方法,即abstract修饰
        void PrintLambda();
      }
      class sonILambda implements iLambda {
          @Override
          public void PrintLambda() {
              System.out.println("接口--实现类使用");
          }
      }

       

      接口-实现类是我们使用最多的定义方式,它的生命周期是全局的,也就是不加特别的约束的话,不管在那个包内都可以通过new关键字实例化一个对象

      但是对于只使用一次的类,就不需要这么麻烦,所以就衍生出了下一种定义方式

      2.接口-静态内部类

      //主方法所在类,启动类:Application
      public class StudyLambda {
          //静态内部实现类
          static class sonILambdaStatic implements iLambda {
              @Override
              public void PrintLambda() {
                  System.out.println("接口--静态实现类");
              }
          }
          public static void main(String[] args) {
              sonILambdaStatic sonILambda = new sonILambdaStatic();
              sonILambda.PrintLambda();
          }
      }

       

      静态内部实现类,首先它的类是静态的,并且它的位置位于我们的主方法的内部

      这样的静态实现类依旧需要static关键字修饰,它和外部实现类差别并不是很大

      主要是作用域,一个在全局,一个在类的内部

      3.接口-局部内部类

          public static void main(String[] args) {
              //局部内部类
              class sonILambdaMian implements iLambda {
                  @Override
                  public void PrintLambda() {
                      System.out.println("接口--局部内部类");
                  }
              }
              sonILambdaMian Lambda = new sonILambdaMian();
              Lambda.PrintLambda();
          }

       

      局部内部类作用域就更小了,它的作用域甚至只在主方法内部,

      由于我们的类只使用一次,这样的定义也是没问题的

      4.接口-匿名内部类

          public static void main(String[] args) {
              //局部内部类
              class sonILambdaMian implements iLambda {
                  @Override
                  public void PrintLambda() {
                      System.out.println("接口--局部内部类");
                  }
              }
              //匿名内部类
              iLambda iLambda = new iLambda() {
                  @Override
                  public void PrintLambda() {
                      System.out.println("接口--匿名内部类");
                  }
              };
              iLambda.PrintLambda();
          }

       

      匿名内部类,没有类名称,必须借助接口或者父类

      在使用到匿名内部类的时候,就和Lamda表达式很像了,匿名内部类把类体和创建写在了一起

      对于这样的类,就可以使用Lamda表达式进行简化

      5.Lamda表达式

       //Lambda表达式
              iLambda = ()->{
                  System.out.println("Lamda表达式");
              };
              iLambda.PrintLambda();

       

      我们可以看到,有了Lamda表达式的,对于只使用一次的类的表达非常方便

      Lamda表达式使用的规则:接口中只含有一个抽象方法

      完整的五种实现类方法具体的位置

      class sonILambda implements iLambda {
          @Override
          public void PrintLambda() {
              System.out.println("接口--实现类使用");
          }
      }
      interface iLambda{
          //接口中默认就是抽象方法,即abstract修饰
          void PrintLambda();
      }
      //主方法所在类,启动类:Application
      public class StudyLambda {
          //静态内部实现类
          static class sonILambdaStatic implements iLambda {
              @Override
              public void PrintLambda() {
                  System.out.println("接口--静态实现类");
              }
          }
          public static void main(String[] args) {
              //局部内部类
              class sonILambdaMian implements iLambda {
                  @Override
                  public void PrintLambda() {
                      System.out.println("接口--局部内部类");
                  }
              }
              //匿名内部类
              iLambda iLambda = new iLambda() {
                  @Override
                  public void PrintLambda() {
                      System.out.println("接口--匿名内部类");
                  }
              };
              //Lambda表达式
              iLambda = ()->{
                  System.out.println("Lamda表达式");
              };
              iLambda.PrintLambda();
          }
      }

       

      Lambda表达式的优化

      1.只有一句程序语句的程序体可以去掉大括号 { ...... }

      iLambda = ()-> System.out.println("Lamda表达式");

       

      2.对于有参数的方法可以不用参数类型

      interface iLambda{
          //接口中默认就是抽象方法,即abstract修饰
          void PrintLambda(int a,String b);
      }
      iLambda = (a,b)-> System.out.println("Lamda表达式"+a+b);

       

      3.对于只有一个参数可以小括号都不用带

      interface iLambda{
          //接口中默认就是抽象方法,即abstract修饰
          void PrintLambda(int a);
      }
      iLambda = a-> System.out.println("Lamda表达式"+a);

       

      上面的描述都是Lamda表达式的优化,对于常用的情况下,我们更推荐参数打上括号,语句体打上大括号

      它即对多个参数的情况可以使用,但是又有简化,多条程序依旧也可以使用

      iLambda = (a,b)-> {
                  System.out.println("Lamda表达式");
                  System.out.println(a);
                  System.out.println(b);
              };

       

      如上写法,

      就是比较标准的Lamda表达式的写法

      二.线程的状态

      Java多线程-Lesson02

       线程一共有五个状态,其中线程的创建状态,已经在Lession1课程中说明完了

      包括继承Thread类,实现Runnable接口等等

      接下来我们会主要研究其它的四个状态

      线程的停止:

      线程的停止终究是不安全的,所以一般我们只推荐线程自然停止

      线程的使用建议都是有穷的,而不是死循环

      建议使用标志位停止线程,不建议使用jdk自带的一些停止线程的方法

      public class TestStop implements Runnable{
          private Boolean flag=true;
      
          public void setFlag(Boolean flag) {
              this.flag = flag;
          }
      
          @Override
          public void run() {
              int i=1;
              while (flag) {
                  System.out.println("run" + i++);
              }
          }
      
          public static void main(String[] args) {
              TestStop testStop = new TestStop();
              new Thread(testStop).start();
              for (int i = 0; i < 200; i++) {
                  if (i==150){
                      testStop.setFlag(false);
                  }
                  System.out.println("main"+i);
              }
          }
      }

       

      如上代码:

      当我们的主函数执行到第150次的时候,就会设置flag为false

      而我们的false就是用来停止其它线程的标志

      这就是使用标志来逼停线程,但是最推荐的还是自然停止

      线程休眠sleep():

      • sleep(时间)指定当前线程的毫秒数;
      • sleep存在异常捕获机制InterruptedException
      • sleep时间到达后线程进入就绪状态
      • sleep可以模拟网络延时,倒计时等
      • 每个对象都有一把锁,sleep不会释放锁
      //模拟倒计时
      public class TestSleep implements Runnable{
          @Override
          public void run() {
              int i=20;
             while (i>=10){
                  try {
                      Thread.sleep(1000);
                      System.out.println(i);
                      i--;
                  } catch (InterruptedException e) {
                      System.out.println("sleep");
                  }
              }
          }
          public static void main(String[] args) throws InterruptedException {
              TestSleep testSleep = new TestSleep();
              new Thread(testSleep).start();
              Thread.sleep(12000);
              for (int i = 9; i >0; i--) {
                  System.out.println(i);
                  Thread.sleep(1000);
              }
          }
      }

       

      线程休眠简单来说就是让正在执行的线程程序停一会

      它的停止时间单位是ms

      1s = 1000ms

      线程礼让yield():

      • 礼让线程,让当前正在执行的线程停止,但不阻塞
      • 将线程从运行状态转为就绪状态
      • 让cpu重新调度,礼让不一定成功,可能cpu在礼让后又让它进来了

      Java多线程-Lesson02

       线程礼让的实现:

      public class TestYield {
          public static void main(String[] args) {
              iYield iYield = new iYield();
              new Thread(iYield,"线程A").start();
              new Thread(iYield,"线程B").start();
          }
      }
      
      class iYield implements Runnable{
          @Override
          public void run() {
              System.out.println(Thread.currentThread().getName()+"开始执行");
              Thread.yield(); //线程礼让
              System.out.println(Thread.currentThread().getName()+"结束执行");
          }
      }

      可能的两种情况:

      正常礼让:

      线程A开始执行
      线程B开始执行
      线程A结束执行
      线程B结束执行

      礼让失败:

      线程A开始执行
      线程A结束执行
      线程B开始执行
      线程B结束执行

       线程的强制执行join():

      线程的强制执行指的是,它在cpu中独占资源,一旦调用此方法,那么cpu就会优先处理这个线程,只有这个线程执行完成以后,其它线程才能执行

      我们可以把它想象成平时排队时,那些插队的人,像是有特权一样,明明后来,结果它先被服务,才到我们

      一旦调用强制执行线程,那么其它线程都会被阻塞

      代码实现:

      public class TestJoin implements Runnable{
          @Override
          public void run() {
              for (int i = 0; i < 1000; i++) {
                  System.out.println("join线程"+i);
              }
          }
      
          public static void main(String[] args) throws InterruptedException {
              TestJoin testJoin = new TestJoin();
              Thread thread = new Thread(testJoin);
              thread.start();
              for (int i = 0; i < 500; i++) {
                  if(i==200){
                     //强制执行线性
                     thread.join();
                  }
                  System.out.println("main"+i);
              }
          }
      }

       线程的状态观测:

      线程状态,可以处于一下状态之一

      NEW

      • 尚未启动的线程处于此状态,其中也可以说是线程的新生状态

      RUNNABLE

      • 在Java虚拟机中执行的时候处于此状态,也可以叫运行时状态

      BLOCKED

      • 被阻塞等待监视器锁定的线程处于此状态,也可以叫阻塞状态

      WAITTING

      • 正在等待另一个线程执行特定动作的线程处于此状态,也可以叫阻塞状态

      TIMED_WAITING

      • 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态,也可以叫阻塞状态

      TERMINATED

      • 已退出的线程处于此状态,也可以叫死亡状态

      一个线程可以在给定的一个时间段处于一个状态,但是它代表不了操作系统和JVM虚拟机的状态

      Thread.State  类包含了线程的所有状态

      代码简单描述:

       public static void main(String[] args) throws InterruptedException {
              Thread thread = new Thread(() -> {
                  for (int i = 0; i < 5; i++) {
                      try {
                          Thread.sleep(500);
                      } catch (InterruptedException e) {
                          System.out.println("sleep");
                      }
                  }
                  System.out.println("Run over");
              });
              // 观察状态
              Thread.State state = thread.getState();
              //线程未启动但被创建的状态
              System.out.println(state);
      
              //启动后的状态
              thread.start();//启动线程
              state = thread.getState();
              System.out.println(state); //RunTime
      
              while (state != Thread.State.TERMINATED){//只要线程不死亡,就一直输出状态
                  Thread.sleep(200);
                  state=thread.getState(); //更新线程状态,必须做的事情
                  System.out.println(state);
              }
      
          }

       

      注意:一旦线程死亡就不能再次通过start()方法启动了,而是要重新开辟线程,new Thread()

      线程优先级Priority:

      Java提供了一个线程调度器来监控程序中启动后进入就绪状态的所有线程

      线程调度器按照线程的优先级决定应该先调度那个线程来执行

      优先级调度的范围用数字表示 :1~10

      • Thread.MIN_PRIORITY  =  1
      • Thread.MAX_PRIORITY  =  10
      • Thread.NORM_PRIORITY  =  5

      改变线程优先级的方法:

      • setPriority(int xxx)  设置线程的优先级
      • getPriority()            查看线程的优先级

      线程的优先级设置一定要此线程启动前调用

      public class TestPriority implements Runnable{
          @Override
          public void run() {
              try {
                  Thread.sleep(200);
              } catch (InterruptedException e) {
                  System.out.println("sleep");
              }
              System.out.println(Thread.currentThread().getName()+"---->"+Thread.currentThread().getPriority());
          }
      
          public static void main(String[] args) {
              TestPriority testPriority = new TestPriority();
              //拿到主线程的优先级
              System.out.println(Thread.currentThread().getName()+"---->"+Thread.currentThread().getPriority());
              //开辟新线程 t1
              Thread t1 = new Thread(testPriority,"t1");
              //先设置其优先级
              t1.setPriority(1);
              //然后再启动线程
              t1.start();
              Thread t2 = new Thread(testPriority,"t2");
              t2.setPriority(10);
              t2.start();
              Thread t3 = new Thread(testPriority,"t3");
              t3.setPriority(8);
              t3.start();
          }
      }

       

      注意点:

      线程的优先级低,只能代表被cpu调度的概率低,并不是写定了谁的优先级最小就一定最后执行

      我们只能根据更改优先级去干扰cpu的调度,并不能直接控制cpu的调度,详情参考《计算机操作系统》处理机章节

      守护线程daemon:

      • 线程分为用户线程和守护线程
      • 虚拟机必须保证用户线程执行完毕 (main线程,主线程一定是执行完,程序结束)
      • 虚拟机不必等到守护线程执行完毕 (GC就是典型的守护线程,不仅不可见,可能很多人都会忽略他的存在,垃圾收集器)
      • 守护线程主要工作于:日志记录,监控内存,垃圾回收,等待操作

      代码描述:

      public class TestDaemon {
          public static void main(String[] args) {
              me i = new me();
              hiddenLove hidden = new hiddenLove();
              Thread isI = new Thread(i);
              isI.setDaemon(true);
              isI.start();
              new Thread(hidden).start();
          }
      }
      
      class me implements Runnable{
          @Override
          public void run() {
              int i=0;
              while (true) {
                  i++;
                  System.out.println("喜且不语,急却等待:第"+i+"次");
              }
          }
      }
      class hiddenLove implements Runnable{
          @Override
          public void run() {
              int i;
              for (i = 1; i < 5 * 365; i++) {
                  System.out.println("释放希望,沐浴阳光,带来治愈");
              }
              System.out.println("会再见嘛?我的意思是"+i+"天后");
          }
      }

       

      守护线程和用户线程最大的区别在于对虚拟机的要求不同

      如果虚拟机还在运行,守护线程也在运行

      如果用户线程不运行了,虚拟机也会停止

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://www.cnblogs.com/5ran2yl/p/17494269.html,作者:~java小白~,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Java内部类

      下一篇:mongodb update

      相关文章

      2025-05-16 09:15:17

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      2025-05-16 09:15:17
      单例 , 线程 , 队列
      2025-05-14 10:07:38

      超级好用的C++实用库之互斥锁

      互斥锁是一种用于多线程编程的同步机制,其主要目的是确保在并发执行环境中,同一时间内只有一个线程能够访问和修改共享资源。

      2025-05-14 10:07:38
      CHP , Lock , 互斥 , 线程 , 释放 , 锁定
      2025-05-14 10:03:13

      arm架构下JAVA开发

      ARM(Advanced RISC Machine)是一种基于精简指令集计算(RISC)设计的处理器架构。它以高效、节能著称,因此广泛应用 于从智能手机到物联网设备的各个领域。

      2025-05-14 10:03:13
      Java , JVM , 嵌入式 , 架构 , 设备
      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。

      2025-05-14 10:03:13
      Linux , void , Windows , 函数 , 操作系统 , 线程
      2025-05-14 10:02:58

      Java实现根据概率中奖率怎么算

      要实现根据概率计算中奖率的功能,可以使用 Java 编程语言编写一个简单的程序。

      2025-05-14 10:02:58
      Java , 概率 , 模拟 , 程序
      2025-05-14 10:02:48

      互斥锁解决redis缓存击穿

      在高并发系统中,Redis 缓存是一种常见的性能优化方式。然而,缓存击穿问题也伴随着高并发访问而来。

      2025-05-14 10:02:48
      Redis , 互斥 , 数据库 , 线程 , 缓存 , 请求
      2025-05-14 09:51:21

      Java 代码本地设置Hadoop用户名密码

      在Hadoop环境中,通常使用Kerberos进行身份验证。但在一些开发或测试环境中,我们可能需要在本地代码中设置用户名和密码来模拟或进行简单的测试。

      2025-05-14 09:51:21
      Hadoop , Java , 代码 , 使用 , 用户名 , 认证
      2025-05-14 09:51:21

      java 判断map为null或者空

      java 判断map为null或者空

      2025-05-14 09:51:21
      Java , Map , null , 方法 , 是否 , 检查 , 示例
      2025-05-14 09:51:15

      java怎么对线程池做监控

      对Java线程池进行监控是确保系统性能和稳定性的重要部分。监控线程池可以帮助我们了解线程池的状态,如当前活跃线程数、任务队列长度、已完成任务数等。

      2025-05-14 09:51:15
      Java , 方法 , 监控 , 示例 , 线程 , 队列
      2025-05-13 09:53:23

      java动态获取实体类的字段

      在Java中,我们可以使用反射(Reflection)API来动态地获取实体类的字段。

      2025-05-13 09:53:23
      API , Java , 使用 , 字段 , 实体类 , 方法 , 获取
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5256052

      查看更多

      最新文章

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      2025-05-16 09:15:17

      超级好用的C++实用库之互斥锁

      2025-05-14 10:07:38

      arm架构下JAVA开发

      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      2025-05-14 10:03:13

      Java实现根据概率中奖率怎么算

      2025-05-14 10:02:58

      互斥锁解决redis缓存击穿

      2025-05-14 10:02:48

      查看更多

      热门文章

      Java线程同步synchronized wait notifyAll

      2023-04-18 14:15:05

      Java/Android Annotation注解/注入(二)

      2023-04-13 09:37:00

      Android/Java判断字符串String是否为float浮点数或double类型

      2023-04-17 09:39:54

      Java小数点数字和百分号数字之间的转换

      2023-04-13 09:48:57

      Java的自带注解Annotation(一)

      2023-05-10 06:02:06

      Java/Android Annotation注解/注入(三)

      2023-04-13 09:37:00

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      gradle 配置java 项目maven 依赖

      【Java技术指南】「编译器专题」重塑认识Java编译器的执行过程(常量优化机制)!

      初学Java,在构造器中调用另一个构造器(十)

      Java环境下实现oracle数据库的备份与还原

      Java多线程基础(一)---Thread API(join深度详解、源码分析和案例分析之代码实现,优雅关闭线程三种方式)

      毕设--基于 SpringBoot 垃圾分类网站设计与实现

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号