- 博客(80)
- 收藏
- 关注
原创 Java面试核心知识5
抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种 运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至 某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。java 使用的线程调使用抢占式调度,Java中线程会按优先级分配CPU时间片运行,且优先级越高 越优先执行,但优先级高并不代表能独自占用执行时间片,可能是优先级高得到越多的执行时间 片,反之,优先级低的分到的执行时间少但不会分配不到执行时间。
2025-01-13 08:45:00
723
原创 Java面试核心知识4
Object 类中的 notify() 方法,唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象 上等待,则会选择唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,线程通过调 用其中一个 wait() 方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继 续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞 争。是一个不存储元素的阻塞队列。读写锁分为读锁和写 锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。
2025-01-12 15:45:00
826
原创 Java面试核心知识3
2. boolean tryLock():如果锁可用, 则获取锁, 并立即返回 true, 否则返回 false. 该方法和 lock()的区别在于, tryLock()只是"试图"获取锁, 如果锁不可用, 不会导致当前线程被禁用, 当前线程仍然继续往下执行代码. 而lock()方法则是一定要获取到锁, 如果锁不可用, 就一 直等待, 在未获得锁之前,当前线程并不继续向下执行.可重入锁,也叫 做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受 影响。
2025-01-12 09:00:00
757
原创 Java核心面试题
一、JVM1、基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接 的交互。2、运行过程:我们都知道Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件, 而字节码文件又通过Java虚拟机中的解释器,编译成特定机器上的机器码 。 也就是如下:① Java源文件—->编译器—->字节码文件② 字节码文件—->J
2025-01-11 09:00:00
598
原创 Java面试核心知识2
TreeMap 实现 SortedMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序, 也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。但是如果锁的竞争激烈,或者持有锁的线程需要长时间占用锁执行同步块,这时候就不适合 使用自旋锁了,因为自旋锁在获取锁前一直都是占用cpu做无用功,占着XX不XX,同时有大量 线程在竞争一个锁,会导致获取锁的时间很长,线程自旋的消耗大于线程阻塞挂起操作的消耗, 其它需要cup的线程又不能获取到cpu,造成cpu的浪费。
2025-01-11 04:15:00
665
原创 计算机网络传输层——传输层-传输层功能
• 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。• TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。• 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。UDP 对应用层交下来的。• 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。
2025-01-10 09:15:00
667
原创 计算机网络——应用层
如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。• 本地域名服务器向根域名服务器的查询通常是采用迭代查询。• IMAP 是一个联机协议。• 由于 SMTP 使用客户服务器方式,因此负责发送邮件的 SMTP 进程就是 SMTP 客户,而负责接收邮件的 SMTP 进程就是 SMTP 服务器。• 当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。
2025-01-10 03:00:00
636
原创 计算机网络——传输层-TCP协议
A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。(2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法。• 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。
2025-01-10 02:15:00
793
原创 计算机网络——网络层—网络层相关协议
• 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B的 IP 地址。• 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。• 发送方是主机,要把IP数据报发送到本网络上的另一个主机。• ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。• 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协。
2025-01-09 09:30:00
595
原创 计算机网络——网络层-网络层设备
其核心技术OpenFlow通过将网络 设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能, 为核心网络及应用的创新提供了良好的平台。在SDN的广义转发中,完成“匹配+动作”的设备并不局限在网络层工作,因此不再称为路 由器,而称为“OpenFlow交换机”或“分组交换机” ,或更简单地称为“交换机”。也就是说, 将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由 器的某个合适的输出端口转发给下一跳路由器。• 路由表是根据路由选择算法得出的。
2025-01-09 01:15:00
260
原创 计算机网络——网络层-IPV4相关技术
3. 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。• 需要注意的是,原子网号不能全为0或全为1,现在随着无分类编址CIDR的广泛使用,子网号也可以全0或全1了,但要求路由器有软件支持。• 但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。(2) 先用各网络的子网掩码和D 逐位相“与”,看是否和相应的网络地址匹配。
2025-01-08 12:00:00
2418
原创 计算机网络——网络层-IP地址
• 需要强调的是,路由表并没有给分组指明到某个网络的完整路径(即先经过哪个路由器,然后再经过哪一个路由器,等等)。路由表指出,到某个网络应当先到某个路由器(即下一条路由器),在到达下一跳路由器后,再继续查找其路由器,知道再下一跳应当到哪一个路由器。2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);这是最基本的编址方法,在 1981 年就通过了相应的标准协议。
2025-01-08 08:30:00
937
原创 计算机网络——网络层—IP数据报与分片
总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节。协议(8 位)字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。当一 个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不。• 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
2025-01-07 13:30:00
573
原创 计算机网络——网络层-网络层功能
• 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。• 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。DHCP协议与ICMP协议;如果随着通信子网负载的增加,网络的吞吐量明显比正常的吞吐量小,那么网络可能已经进入轻度。应的处理,它是全局问题,涉及各方面的行为,如所有主机、路由器(路由器的存储转发能力)和。
2025-01-07 08:30:00
395
原创 计算机网络——网络层—路由算法和路由协议
一、因特网的路由选择协议• 不存在一种绝对的最佳路由算法。• 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。• 实际的路由选择算法,应尽可能接近于理想的算法。• 路由选择是个非常复杂的问题 • 它是网络中的所有结点共同协调工作的结果。 • 路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。二、路由算法• 路由选择是路由器用来将数据分组转发到目的地网络的过程,这个过程是通过路由表实现的,而路由表是通过各种路由算法得到的。• 路由协议根据路由算
2025-01-06 15:12:45
901
原创 计算机网络——数据链路层设备
直通式交换机在检查数据报的前64个字节后就转发,对于小于64个字节的数据报,交换机将其认为是碎片,不进行转发。先将接收到的帧存储在高速缓存中,并检查数据是否正确,确认无误后,查找转发表,并将该帧从查询到的端口转发出去。• 使用以太网交换机时,虽然在每个接口到主机的带宽还是 10 Mb/s,但由于一个用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,因此对于拥有N 对接口的交换机的总容量为。• 在转发帧时,则是根据收到的帧首部中的目的地址来转发的。查找转发表中与收到帧的源地址有无相匹配的项目。
2025-01-06 14:11:37
970
原创 计算机网络——数据链路层—局域网和广域网
高级数据链路控制(High-Level Data Link Control或简称HDLC),是一个在同步网上传输数据、面向比特的数据链路层协议,它是由国际标准化组织(ISO) 开发而成的.其最大特点是不需要数据必须是规定字符集,对任何一种比特流,均可以实现透明的传输。因为PPP协议是点对点的,并不是总线型,所以无需采用CSMA/CD协议,自然就没有最短帧,所以信息段占0~1500个字节,而不是46~1500个字节。• 无编号帧(U帧)无编号帧用于数据链路的控制,它本身不带编号,可以在任何需要的时刻发出,
2025-01-06 13:48:00
1211
原创 计算机网络——数据链路层-介质访问控制
当传输介质的带宽超过了传输单个信号所需的带宽时,人们就通过在一条介质上同时携带多个传输信号的方法来提高传输系统的利用率,这就是所谓的多路复用,也是实现信道划分介质访问控制的途径。• 发送数据前,先检测到信道状态,等到信道空闲后,再等待一段时间后,再次检测信道是否空闲,如果还是空闲,那么立刻发送数据,否则,随机等待一定时间,等时间到期后,再次发送检测。• B 若在 A 发送的信息到达 B 之前发送自己的帧(因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。
2025-01-05 16:09:44
913
原创 计算机网络——数据链路层-流量控制和可靠传输
若序号为0~4的帧都已经发送完毕,且未收到一个确认帧,则无法继续发送后续帧,如图(c)所示。而当发送端每收到一个确认帧之后,发送窗口就向前滑动一个帧的位置,图(d)给出了收到三个确认帧之后的发送窗口示意,此时可继续发送序号为5~7的3个帧。一旦某个帧有错,则接收方就丢弃该帧和它之后所收到的所有帧(不管这些帧是正确的还是错误的),对出错的帧不发送确认帧;接收窗口的大小与发送窗口无关,当接收窗口大小为1时,如图所示,收到一个数据帧后,将窗口向前移动一个位置,并发送确认帧。于是就出现了死锁现象。
2025-01-05 09:54:55
742
原创 计算机网络——数据链路层-功能、组帧和差错控制
其中,编号为2的幂的位(1号位、2号位、4号位、8号位等)是校验位,其余的位填入 k 位数据。为了知道编号为 k 的数据位对哪些校验位有影响,将编号 k 改写为2的幂的和,如10=2+8,31=1+2+4+8+16等。一个位只有扩展式中所示编号的位检测,如编号为10的位只有编号为2和8的校验位检测。组帧的关键问题是能够让接收端在接收到物理层上交的比特流后, 就可以根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束,这样在出错时就不必重发全部数据而只重发出错的帧即可。数据链路层传送的是帧。
2025-01-04 13:41:42
577
原创 计算机网络——物理层
a.在报文交换中便于设置代码检验和数据重发设施,加之交换结点还具有路径选择,就可以做到某条传输路径发生故障时,重新选择另一条路径传输数据,提高了传输的可靠性;他给出了在假定的理想条件下,为了避免码间串扰,码元的传输速率的上限值。2、香农定理:香农(Shannon)用信息论的理论推导出了带宽受限且有高斯白噪声干扰的信道的极限、无差错的信息传输速率。3、报文交换:数据交换的单位是报文,报文携带有目标地址、源地址等信息。文、检验正确性、排队、发送时间等),而且网络的通信量愈大,造成的时延就愈大,因此报文。
2025-01-03 13:39:35
936
原创 计算机网络体系结构与参考模型
应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登录服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。表示层的具体功能如下:数据格式处理、数据的编码、压缩和解压缩、数据的加密和解密。
2025-01-01 14:36:18
971
原创 计算机网络体系结构基础知识
现在“带宽”是数字信道所能传送的“最高数据率”的同义语,单位是“比特每秒”,或 b/s (bit/s)。“带宽”(bandwidth)本来是指信号具有的频带宽度,单位是赫(或千赫、兆赫、吉赫等)。注:对于高速网络链路,我们提高的仅仅是数据的发送速率而不是比特在链路上的传播速率。• 也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。• 比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。
2025-01-01 13:54:48
551
原创 Java中的注解
Deprecated用@Deprecated注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。//凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。编译器看到方法上有这个注解的时候,编译器会自动检查该方法是否重写了父类的方法。这个Target注解用来标注”被标注的注解“可以出现在哪些位置上。构造方法上,字段上,局部变量上,方法上,类上……第二:注解可以出现在类上,属性上,方法上,变量上等…
2024-02-16 09:50:27
496
原创 Java中通过反射机制访问对象属性
/给obj对象的no属性赋值2222。s.no=1111;//三要素:给s对象的no属性赋值1111。//打破封装(反射机制的缺点:打破封装,可能会给不法分子留下机会)//使用反射机制,怎么去访问一个对象的属性。//要素2:no属性。//我们不使用反射机制,怎么去访问一个对象的属性呢?//要素3:1111。//给obj对象(Student对象)的no属性赋值。//获取no属性(根据属性的名称来获取Field)//两个要素:获取obj对象的no属性的值。//两个要素:获取s对象的no属性的值。
2024-02-15 17:23:39
587
原创 Java中的类加载器
优先从启动类加载器中加载,这个称为“父”,“父”无法加载到,再从扩展类加载器中加载,这个成为“母”。双亲委派,如果都加载不到,才会考虑从应用类加载器中加载,直到加载到为止。通过类加载器加载,看到以上代码类加载器会找String.class文件,找到就加载,那么是怎么进行加载的呢?如果通过“启动类加载器”加载不到的时候,会通过“扩展类加载器”加载。如果“扩展类加载器”没有加载到,那么会通过“应用类加载器”加载。注意:应用类加载器专门加载:classpath中的类。首先通过"启动类加载器”加载。
2024-02-08 08:27:05
537
原创 Java中通过反射实例化对象
/newInstance() 这个方法会调用User这个类的无参数构造方法,完成对象的创建。注意:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。//重点是:newInstance()调用的是无参构造,必须保证无参构造是存在的。//通过反射机制,获取Class文件,通过Class来实例化对象。//这是不使用反射机制,创建对象。
2024-02-07 08:13:44
249
原创 Java中获取Class的三种方式
/c1代表String.class文件,或者说c1代表String类型。//x代表String.class字节码文件,x代表String类型。
2024-02-06 08:30:21
842
原创 Java中的反射机制
java.lang.reflect.Field: 代表字节码中的属性字节码,代表类中的成员变量(静态变量+实例变量)java.lang.Class: 代表整个字节码,代表一个类型,代表整个类。java.lang.reflect.Constructor: 代表字节码中的构造方法字节码,代表类中的构造方法。java.lang.reflect.Method: 代表字节码中的方法字节码,代表类中的方法。
2024-02-05 08:36:50
270
原创 Java中的生产者和消费者模式
第一:wait和notify方法不是线程对象的方法,是java中任何一个Java对象都有的方法,因为这两个方式是Object类中自带的。5.wait方法作用:o.wait()让正在o对象上活动的线程t进入等待状态,并且释放掉t线程之前占有的o对象的锁。6.notify方法作用:o.notify()让正在o对象上等待的线程唤醒,只是通知,不会释放o对象上之前占有的锁。4.wait方法和notify方法建立在线程同步的基础之上。3.wait和notify方法不是线程对象的方法,是普通java对象都有的方法。
2024-02-04 08:50:39
466
原创 Java中实现线程的第三种方式
/JUC包下的,属于java的并发包,老JDK中没有这个包。系统委派一个线程去执行一个任务,该线程执行完任务之后,可能会有一个执行结果,我们怎么能拿到这个执行结果呢?return a+b;这种方式的缺点:效率比较低,在获取t线程执行结果的时候,当前线程受阻塞,效率较低。//而get()方法可能需要很久,因为get()方法是为了拿另一个线程的执行结果。//线程执行一个任务,执行之后可能会有一个执行结果。//main方法这里的程序要想执行必须等待get()方法的结束。//而另一个线程执行是需要时间的。
2024-02-03 09:06:01
340
原创 Java中的定时器
不过,这种方式在目前的开发中也很少用,因为现在有很多高级框架都是支持定时任务的。在实际开发中,目前使用较多的是Spring框架中提供的SpringTask框架,这个框架只要进行简单的配置,就可以完成定时器的任务。可以使用sleep方法,睡眠,设置睡眠时间,每到这个时间点醒来,执行任务,这种方式是最原始的定时器。//timer.scheduls(定时任务,第一次执行时间,间隔多久执行一次);定时器的作用:间隔特定的时间,执行特定的程序。//编写你需要执行的任务就行了。//假设这是一个记录日志的定时任务。
2024-02-02 08:26:42
504
原创 Java中的守护线程
一直在那里看着,每到00:00的时候就备份一次,所有的用户线程如果结束了,守护线程自动退出,没有必要进行数据备份了。2.守护线程的特点:一般守护线程是一个死循环,所有的用户线程只要结束,守护线程自动结束。//即使是死循环,但由于该线程是守护者,当用户线程结束,守护线程自动终止。其中具有代表性的就是:垃圾回收器(守护线程)t.setName("备份数据的线程");//启动线程之前,将线程设置为守护线程。注意:主线程main方法是一个用户线程。一类是:守护线程(后台线程)//主线程:主线程是用户线程。
2024-02-01 08:34:22
255
原创 队列的基础知识
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构。与栈结构不同的是,队列的两端都“开口”,要求数据只能从一端进,从另一端出。逻辑结构 与线性表相同,仍为一对一关系存储结构 用顺序队列或链队列存储即可访问结点时依照先进先出(FIFO)或后进后出(LILO)的原则数据对象:D={ai| ai∈ElemSet, i=1,2,...,n, n≥0 }
2024-01-31 12:52:32
1206
原创 Java中的线程安全
线程t1和线程t2,在线程t1执行的时候,必须等待t2线程执行结束,或者说在t2线程执行的时候,必须等待t1线程执行结束,两个线程之间发生了等待关系,这就是同步编程模型。以后在开发中,我们的项目都是运行在服务器当中,而服务器已经将线程的定义,线程对象的创建,线程的启动等,都已经实现完了。线程同步就是线程排队了,线程排队了就会牺牲一部分效率,没办法,数据安全第一位,只有数据安全了,我们才可以谈效率,数据不安全,没有效率的事。专业术语叫做:线程同步,实际上就是线程不能并发了,线程必须排队执行。
2024-01-31 09:14:10
391
原创 Java中的线程优先级
System.out.println(Thread.currentThread().getName()+"线程的默认优先级:"+Thread.currentThread);System.out.println(currentThread.getName()+"线程的默认优先级是:"+currentThread.getPriority());//t合并到当前线程中,当前线程受阻塞,t线程执行直到结束。//获取当前线程对象,获取当前线程的优先级。//main线程的默认优先级是:5。//设置主线程的优先级为1。
2024-01-30 08:25:43
490
原创 Java中的线程调度
/当前线程进入阻塞,t线程执行,直到t线程结束。当前线程才可以继续。优先级比较高的获取CPU时间片可能会多一些(但也不完全是,大概率是多的)那个线程的优先级比较高,抢到的CPU时间片的概率就高一些/多一些。让当前线程让位,让给其他线程使用。yield()方法的执行会让当前线程从”运行状态“回到”就绪状态“平均分配CPU时间片,每个线程占有的CPU时间片时间长度一样。有一些编程语言,线程调度模型采用的是这种方式。暂停当前正在执行的线程对象,并执行其他线程。2.java中提供了哪些方法是和线程调度有关系的?
2024-01-29 15:43:39
58
原创 Java中线程的sleep方法
/在执行的时候还是会转换成:Thread.sleep(1000*5);3.作用:让当前线程进入休眠,进入“阻塞状态”,放弃占有CPU时间片,让给其他线程使用。//这行代码的作用是:让当前线程进入休眠,也就是说main线程进入休眠。//终止t线程的睡眠(这种中断线程的方式依靠了java的异常处理机制)//希望5秒之后,t线程醒来(5秒之后主线程手里的活干完了)//这行代码出现在main方法中,main线程睡眠。//让当前线程进入休眠期,睡眠5秒。//问题:这行代码会让线程t进入休眠状态吗?
2024-01-28 08:23:16
1924
原创 Java中实现线程的两种方式
/start()方法的作用是:启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后,瞬间就结束了。System.out.println("分支线程是-->"+i);//run方法在分支栈的栈底部,main方法在主栈的栈底部。//启动成功的线程会自动调用main方法,并且run方法在分支栈的栈底部(压栈)System.out.println("分支线程是-->"+i);//这里是main方法,这里的代码属于主线程,在主栈中运行。//这并不是一个线程类,是一个可运行的类,它还不是一个线程。
2024-01-27 10:50:21
395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人