1)新建:即创建线程类的实例,为其分配内存和其他资源; 2)就绪:处于新建状态的线程对象用start()方法启动后,将进入线程队列等待CPU时间片,此时它已经具备了运行的条件,但还未调用run()方法,一旦轮到它来享用CPU资源,它的run()方法就会自动被调用,它就可以“脱离”创建它的主线程独立开始自己的生命周期了。原来处于阻塞状态的线程当阻塞解除后,不需要调用start()方法也将进入就绪状态;当其获得CPU资源时,也不会重新调用run()方法,而是从上次中止的位置继续执行。 Runnable接口: 只有一个方法run(),所有实现Runnable接口的类(如Thread类)都必须具体实现这个方法,为其书写方法体并定义具体操作。 Runnable接口的run()方法是一个较特殊的方法,它可以被运行系统自动识别和执行(包括从头开始执行和从中断处继续执行)。启动线程的run()方法是通过调用线程的start()方法来实现的,start()方法中调用启动线程的run()方法不同于调用一般的方法。调用一般的方法时,必须等到一般方法执行完毕才能返回start()方法,而启动线程的run()方法后(也可能没有启动,而只是告诉系统可以启动了),start()告诉系统该线程准备就绪后,马上就返回调用start()方法的语句下面的语句[而不管run()方法有没有开始执行语句],这时run()方法可能还在运行[也可能还未开始运行],这样线程的启动和运行并行进行,实现了多任务操作。 如果没有通过start()而直接调用run()方法,则同调用一般方法一样,要等run()执行完毕才会返回。这样就实现不了多线程了,所以实现多线程,必须用start()方法。 因为Runnable接口不提供start()方法,所以使用Runnable来实现多线程时,须用Runnable 对象目标初始化Thread类,由Thread提供start()方法,而运行时调用Runnable目标对象的run()方法。 |
java 多线程初步
最新推荐文章于 2024-11-09 12:43:52 发布