`
tomotoboy
  • 浏览: 166872 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

谈谈Runnable接口和Thread

阅读更多
Runnable接口

public interface RunnableRunnable
  • 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
  • 设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。
  • 此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。

--------------------------------------------------------------------------------
run
void run()使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
方法 run 的常规协定是,它可能执行任何所需的动作。





Thread

线程是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

当Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:
  • 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
  • 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。
------------JDK中文帮助

Thread的几个常用方法:
yield
public static void yield()暂停当前正在执行的线程对象,并执行其他线程。


--------------------------------------------------------------------------------

sleep
public static void sleep(long millis)
                  throws InterruptedException在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。
参数:
millis - 以毫秒为单位的休眠时间。
抛出:
InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。

--------------------------------------------------------------------------------
interrupt
public void interrupt()中断线程。
如果当前线程没有中断它自己(这在任何情况下都是允许的),则该线程的 checkAccess 方法就会被调用,这可能抛出 SecurityException。

如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。

如果该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。

如果该线程在一个 Selector 中受阻,则该线程的中断状态将被设置,它将立即从选择操作返回,并可能带有一个非零值,就好像调用了选择器的 wakeup 方法一样。

如果以前的条件都没有保存,则该线程的中断状态将被设置。

中断一个不处于活动状态的线程不需要任何作用。


抛出:
SecurityException - 如果当前线程无法修改该线程
--------------------------------------------------------------------------------

interrupted
public static boolean interrupted()测试当前线程是否已经执行中断操作。线程的中断状态 由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。
线程中断被忽略,因为在中断时不处于活动状态的线程将由此返回 false 的方法反映出来。

--------------------------------------------------------------------------------

isInterrupted
public boolean isInterrupted()测试线程是否已经中断。线程的中断状态 不受该方法的影响。
线程中断被忽略,因为在中断时不处于活动状态的线程将由此返回 false 的方法反映出来。


返回:
如果该线程已经中断,则返回 true;否则返回 false。
返回:
如果当前线程已经中断,则返回 true;否则返回 false。
分享到:
评论

相关推荐

    java基础代码_java_输入输出流_接口_多线程_异常_

    Java通过Thread类和Runnable接口支持多线程。创建线程有两种方式:一是直接继承Thread类并重写run()方法,二是实现Runnable接口并提供run()方法,然后通过Thread对象启动。线程间的通信和同步是多线程编程的重点,...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.26.docx

    答案:Java 中实现多线程主要有两种方式:继承 Thread 类和实现 Runnable 接口。Thread 类是 Java 提供的内置线程类,可以直接继承并重写 `run()` 方法。Runnable 接口则需要实现 `run()` 方法,并通过 Thread 对象...

    坦克大战 myself.zip

    前者直接创建Thread对象并覆盖run()方法,后者则通过实现Runnable接口并将其传递给Thread对象的构造函数。为了更有效地管理线程,还可以使用ExecutorService和ThreadPoolExecutor,它们提供线程池功能,可以控制并发...

    pop.rar_pop

    Java提供了两种创建线程的方式:继承Thread类或实现Runnable接口。线程可以提高应用程序的响应性和效率,尤其是在UI应用中,它们可以让用户界面保持活跃,即使后台正在执行耗时的操作。 首先,让我们来理解Java中的...

    Java考试前总结(包含io输入输出流/线程/特殊for语句/文件读写的总结)

    Java提供了两种创建线程的方法:继承Thread类和实现Runnable接口。继承Thread类允许直接重写run()方法,而实现Runnable接口则需要将run()方法定义在另一个类中,然后将该类实例传递给Thread对象。线程的生命周期包括...

    java常见面试题目

    Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。继承Thread类可以直接重写run()方法,而实现Runnable接口则需要将run()方法包含在实现的类中,并通过Thread对象启动。 4. **解释一下...

    多线程

    在Java中,多线程可以通过继承Thread类或者实现Runnable接口来创建。Thread类代表一个线程实例,而Runnable接口则是一个实现了可执行任务的抽象类。通过重写Thread的run()方法或Runnable的run()方法,我们可以定义...

    java单线程多线程clientserver

    1. 实现Runnable接口:创建一个类实现Runnable接口,然后将其实例传递给Thread类的构造函数。 2. 继承Thread类:直接或间接继承Thread类,并重写run()方法。 在客户端-服务器架构中,多线程可以用于提高服务器处理...

    BasicKnowledge

    在Java等语言中,多线程可以通过实现Runnable接口或继承Thread类来实现。例如: ```java class MyTask implements Runnable { public void run() { // 这里编写线程执行的任务代码 } } public class Main { ...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.60.docx

    答案:实现多线程有两种方式:继承Thread类并重写run()方法,或实现Runnable接口并实现run()方法。Thread是线程类,可以直接启动,而Runnable是接口,需要与Thread结合使用。实现Runnable更灵活,可以实现多个接口,...

    Java笔记Core java

    Java的Thread类和Runnable接口是实现多线程的关键。通过创建Thread对象并传入Runnable实例,或者直接让类实现Runnable接口并重写其run()方法,都可以启动新线程。线程间的通信和同步是多线程编程中的重要课题,Java...

    QQ聊天室(QQ 聊天室)

    Java提供了Thread类和Runnable接口来支持多线程编程,开发者可以通过继承Thread类或实现Runnable接口来创建自定义线程。 接下来,让我们谈谈Java GUI。QQ聊天室的用户界面是通过Java Swing或JavaFX库构建的,这两个...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.24.docx

    答案:Java 中实现多线程主要有三种方式:继承 Thread 类、实现 Runnable 接口和使用 ExecutorService。继承 Thread 类直接创建线程类,但限制了类的继承性;实现 Runnable 接口更灵活,可以与其他接口一起实现,...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.65.docx

    实现线程有两种方式:继承 Thread 类或实现 Runnable 接口。线程同步是防止多个线程并发访问共享资源导致数据不一致的方法,包括 synchronized 关键字、Lock 接口(如 ReentrantLock)和 volatile 变量等。...

    Java编程百例(全)03-03

    多线程是Java的一大特色,通过实现Runnable接口或继承Thread类,我们可以创建并发执行的任务。例如: ```java Thread thread = new Thread(new Runnable() { @Override public void run() { // 线程执行的代码 ...

    java多线程核心编程技术

    - **实现Runnable接口**:定义一个实现Runnable接口的类,并重写run()方法,然后将其传递给Thread的构造器。 - **实现Callable接口**:与Runnable类似,但可以返回结果,并且可以抛出异常。 #### 二、线程的生命...

    java面试题

    线程是程序执行的最小单元,Java通过Thread类和Runnable接口实现多线程。可以创建Thread对象并重写run()方法,或实现Runnable接口并将其传递给Thread构造函数。 9. **Java中的synchronized关键字的作用是什么?** ...

    使用Java理解程序逻辑第13章.zip

    通过实现Runnable接口或继承Thread类,我们可以创建自己的线程。使用synchronized关键字可以实现线程同步,防止数据不一致,保证共享资源的安全访问。线程间的通信可以通过wait()、notify()和notifyAll()方法实现,...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.47.docx

    实现 Runnable 接口时,实现 run() 方法,然后将 Runnable 实例传递给 Thread 类的构造器,创建 Thread 对象并调用 start() 方法启动。线程的生命周期包括新建、可运行、运行、阻塞和死亡五种状态。新建状态是线程...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.78.docx

    答案:在 Java 中实现多线程有两种基本方式:继承 Thread 类并重写 run() 方法,或者实现 Runnable 接口并实现 run() 方法,然后将 Runnable 实例传递给 Thread 构造器。解析:这两种方式都可以创建线程,但实现 ...

Global site tag (gtag.js) - Google Analytics