Java多线程有三种主要创建方式。第一种方式是继承Thread类,并重写run方法。例如,创建一个名为xx的类,继承Thread类,并在其中重写run方法,内容如下:public void run(){Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源}。当对象调用start方法后,该线程开始执行run方法中...
java多线程有哪些状态,主要流转流程
Java多线程有三种主要创建方式。第一种方式是继承Thread类,并重写run方法。例如,创建一个名为xx的类,继承Thread类,并在其中重写run方法,内容如下:public void run(){Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源}。当对象调用start方法后,该线程开始执行run方法中的代码。第二种方式是实现Runnable接口,重写run方法。例如,创建一个对象,然后创建一个Thread对象,将该对象作为参数传递给Thread构造函数,接着调用Thread对象的start方法。第三种方式是实现Callable接口,重写call方法。Callable类似于Runnable,实现Callable接口的类和实现Runnable接口的类都是可被其他线程执行的任务。这两种接口的主要区别在于:
Callable规定的方法是call(),而Runnable规定的方法是run()。Callable的任务执行后可返回值,而Runnable的任务不能返回值。call()方法可抛出异常,而run()方法不能抛出异常。当调用Callable任务时,可获得一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,取消任务的执行,还可获取任务执行的结果。
线程的状态流转主要有就绪、运行、阻塞和结束四种状态。当线程启动时,它从就绪状态进入运行状态。如果运行中的线程调用sleep或等待I/O操作,它将进入阻塞状态。当线程完成其任务时,它从运行状态进入结束状态。就绪状态是指线程已经准备好了执行,但它还没有被分配到CPU执行时间。运行状态是指线程正在执行run方法或call方法中的代码。阻塞状态是指线程因为等待某个事件或资源而暂停执行,直到事件发生或资源可用。结束状态是指线程已经完成其任务,不再执行。
线程状态的流转遵循一定的规则,如:从就绪状态到运行状态的转换,需要操作系统调度器决定。当一个线程处于运行状态时,它可能进入阻塞状态,这取决于它调用的某些方法。当一个线程调用sleep方法时,它会进入阻塞状态,直到指定的时间到达或被中断。当线程完成其任务时,它会从运行状态进入结束状态,此时线程将终止其执行。
在Java中,线程的生命周期可以分为以下几个阶段:新建、就绪、运行、阻塞、等待、定时等待和终止。新建阶段是指线程对象已经被创建,但是还没有调用start方法。就绪阶段是指线程已经被创建,并且已经调用start方法,但是还没有被分配到CPU执行时间。运行阶段是指线程正在执行run方法或call方法中的代码。阻塞阶段是指线程因为等待某个事件或资源而暂停执行,直到事件发生或资源可用。等待阶段是指线程调用wait方法后,将进入等待状态,直到其他线程调用notify或notifyAll方法唤醒它。定时等待阶段是指线程调用sleep方法或join方法时,将进入定时等待状态,直到指定的时间到达或被中断。终止阶段是指线程已经完成其任务,不再执行。2024-12-20