Java中线程简单入门

本文介绍了Java中线程的基本概念,包括线程的生命周期、创建线程的两种方式(继承Thread类和实现Runnable接口)、线程调度以及线程安全问题。通过实例详细讲解了线程的同步机制,如synchronized关键字的使用,并提到了死锁和守护线程的概念。最后,文章还提及了Java定时器和JDK8新增的Callable接口。
摘要由CSDN通过智能技术生成

1.线程是一个进程中的执行场景/执行单元,一个进程可以启动多个线程。比如以java为例,在DOS命令窗口运行一个java文件,此时会先启动JVM,而JVM就是一个进程,JVM会启动一个主线程调用main方法,同时再启动一个垃圾回收线程负责看护,回收垃圾,所以至少有两个线程并发。

   两个进程之间的内存独立不共享,而属于同一进程的两个线程A、B会共享一定的资源,在java中,线程A和线程B共享堆内存和方法区内存,但是栈内存独立,一个线程一个栈,栈与栈之间互不干扰,各自执行各自的,这就是多线程并发

   多线程机制是为了提高程序的处理效率。

   使用了多线程机制之后,即使main方法结束了,程序可能还没有结束。main方法结束只是主线程结束了,主栈空了,而其他的栈(线程)还在压栈弹栈。

2.实现线程的两种方式

        ①第一种方式:编写一个类,直接继承java.lang.Thread类重写run方法

            通过new创建线程对象,调用线程对象的start()方法启动线程。start()方法的作用是启动一

          个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后瞬间就结束了,即只要

          新的栈空间开出来,start()方法就结束了,新的线程就启动成功了。启动成功的线程会自动

          调用run()方法,并且run()方法在分支栈的栈底部(压栈),而main方法在主栈的栈底部,因此

          run()方法和main()方法是平级的。注意:main方法里的循环还是在start()方法结束之后才开

          始运行的,只是start()方法瞬间就结束了,记住一个方法体内的代码一定是按照自上而下的

          顺序执行的。

             如果不启动start()方法,直接调用线程对象的run()方法,就没有产生新的栈空间,而是把

          run()方法压入了主栈,根据从上而下的顺序依次执行,此时仍旧是单线程。

        ②第二种方式:编写一个类,实现java.lang.Runnable接口实现run方法

            此时在Thread的构造方法中传入一个Runnable接口的实现类,也可以使用匿名内部类。

 

            注意第二种方法实现接口比较常用,因为一个类实现了接口,它还可以去继承其他的

          类,更灵活。

3.线程的生命周期。        

        ①新建状态:刚new出来的线程对象。

        ②就绪状态:又叫做可运行状态,表示当前线程具有抢夺CPU时间片的权利(CPU时间片就是

          执行权)。当一个线程抢夺到CPU时间片之后,就开始执行run()方法,run方法的开始执行标

          志着线程进入运行状态。

        ③运行状态:run方法的开始执行标志着这个线程进入运行状态,当之前占有的CPU时间片用

          完之后,会重新回到就绪状态继续抢夺CPU时间片,当再次抢到CPU时间片之后,会重新进

          入run方法接着上一次的代码继续往下执行。

        ④阻塞状态:当一个线程遇到阻塞事件,例如接收用户键盘输入,或者sleep方法等,此时线

          程会进入阻塞状态ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值