[Java]Thread类run()和start()

来源:互联网 发布:java开发常见问题 编辑:程序博客网 时间:2024/05/22 00:10

类中实现的run()方法指明如何完成任务。
Java虚拟机自动调用该方法,无需特意调用它。
直接调用run()方法只是在同一个线程中执行这个方法,与普通方法类似,而没有新线程被启动,可重复多次调用。
而start()方法重新创建了一个线程,在main方法执行结束后,注意,默认创建的线程是用户线程(非守护线程),调用该Runnable对象的run()方法,不能多次启动一个线程。
一般步骤:
1.声明实现java.lang.Runnable接口的类,实现run()方法;
2.创建对象(可运行对象runnable object)
3.创建线程
4.启动线程

java.lang.Thread implements Runnable:
+Thread():创建默认线程
+Thread(task:Runnable):为特定任务创建线程
+start():void 启动线程使run()方法被JVM调用
+isAlive():boolean 测试线程目前是否在运行
+setPriority(p:int):void 将线程优先级设为p(1-10),主线程优先级Thread.NORM_PRIORITY.
+join():void 等待线程结束
+sleep(millis:long):void 使可运行对象睡眠指定毫秒数;将该线程设置为休眠以确保其他线程的执行。(注:InterruptedException必检异常)
+yield():void 使本线程临时暂停并允许其他线程执行;为其他进程临时让出CPU时间。
+interrupt():void 中断线程
stop()/suspend()/resume()方法被弃用。
为替代stop()方法,可通过给Thread变量赋值null来表明它被停止。
为避免资源竞争(contention or starvation),高优先级的线程必须定时地调用sleep或yield方法,来给低优先级或相同优先级的线程一个运行的机会。

因为Thread类要实现Runnable,所以,可以声明一个类继承Thread,并且实现run()方法。然后生成对象调用它的start()方法。
但是不推荐这种方法,因为它将任务和运行任务的机制混在一起。将任务从线程中分离出来是比较好的设计。

0 0
原创粉丝点击