当前位置: 代码迷 >> 综合 >> 分别用Thread、Runnable、Callable实现线程
  详细解决方案

分别用Thread、Runnable、Callable实现线程

热度:67   发布时间:2023-11-02 11:48:27.0

Callable

  1. Callable和Runnable一样,但是Callable可以有返回值,可以捕获异常。
  2. 方法不同,run()。
public class ThreadByExtends extends Thread {private int i;@Overridepublic void run() {//当线程类继承Thread类时,直接使用this即可获取当前线程句柄。// 因此可以直接调用getName()方法返回当前线程的名称。System.out.println("当前线程名称是:" + getName());for (; i < 5; i++) {System.out.println(getName() + ":" + i);try {//保证让别的线程也有执行的机会Thread.sleep(10);} catch (InterruptedException e) {}}}public static void main(String[] args) {//静态方法没有this,只能通过Thread.currentThread获取当前线程句柄System.out.println(Thread.currentThread().getName());//创建、并启动第一条线程new ThreadByExtends().start();//创建、并启动第二条线程new ThreadByExtends().start();}
}

继承Thread类创建线程类

public class ThreadByExtends extends Thread {private int i;@Overridepublic void run() {//当线程类继承Thread类时,直接使用this即可获取当前线程句柄。// 因此可以直接调用getName()方法返回当前线程的名称。System.out.println("当前线程名称是:" +getName());for (; i < 5; i++) {System.out.println(getName()+ ":" +i);try{//保证让别的线程也有执行的机会Thread.sleep(10);}catch(InterruptedException e) {}}}public static void main(String[] args) {//静态方法没有this,只能通过Thread.currentThread获取当前线程句柄System.out.println(Thread.currentThread().getName());//创建、并启动第一条线程new ThreadByExtends().start();//创建、并启动第二条线程new ThreadByExtends().start();}
}

实现Runnable接口创建线程类

 通过实现Runnable接口来创建线程类

* 1.Runnable非常适合多个相同线程来处理同一份资源的情况

* 2.Runnable可以避免由于Java的单继承机制带来的局限

* 3.如果想获取当前线程句柄,只能用Thread.currentThread()方法*/

public class ThreadByRunnable implements Runnable {private int i;@Overridepublic void run() {System.out.println("当前线程名称是:" + Thread.currentThread().getName());for (; i < 5; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);try {//因为sleep是静态方法,所以不需要通过Thread.currentThread()方法获取当前线程句柄Thread.sleep(10);} catch (InterruptedException e) {}}}public static void main(String[] args) {ThreadByRunnable st = new ThreadByRunnable();new Thread(st, "新线程1").start();new Thread(st, "新线程2").start();}}


 

  相关解决方案