21xrx.com
2024-09-17 04:14:47 Tuesday
登录
文章检索 我的文章 写文章
我最近学习了Java的多线程
2023-06-15 20:07:06 深夜i     --     --

我最近学习了Java的多线程,发现有一种通过实现Runnable接口的方式创建线程的方法,非常简单实用。今天我来分享一下我的经验。

首先,实现Runnable接口要求实现类中必须要有run()方法,这个方法中就是线程的具体执行代码。下面是一个简单的例子:


class MyThread implements Runnable {

 public void run() {

  System.out.println("Hello from MyThread class!");

 }

}

public class Main {

 public static void main(String[] args) {

  Thread t = new Thread(new MyThread());

  t.start();

 }

}

这个例子中,我们创建了一个MyThread类,并实现了Runnable接口。在run()方法中,我们打印一句话。在Main类中,我们创建了一个Thread对象,并将MyThread作为参数传入。然后,我们调用start()方法启动线程,执行MyThread类的run()方法。

这种方式相比于继承Thread类来创建线程,有以下好处:

1. 避免单继承的限制。如果我们继承了Thread类,就不能再继承其他类了,但是实现Runnable接口没有这样的限制。

2. 支持共享数据。我们可以将共享数据作为属性传入Runnable类中,这样不同线程之间就可以共享这些数据了。

3. 更好的代码风格。实现接口是Java的一种良好的编程实践,能够使代码更清晰、更易于维护。

下面是一个根据共享变量来控制线程退出的例子:


class Worker implements Runnable {

 private volatile boolean running = true;

 public void run() {

  while (running) {

   System.out.println("Working...");

   try {

    Thread.sleep(1000);

   } catch (InterruptedException e) {

    Thread.currentThread().interrupt();

   }

  }

  System.out.println("Worker stopped.");

 }

 public void stop()

  running = false;

 

}

public class Main {

 public static void main(String[] args) throws InterruptedException {

  Worker worker = new Worker();

  Thread t = new Thread(worker);

  t.start();

  Thread.sleep(5000);

  worker.stop();

 }

}

在这个例子中,我们创建了一个Worker类,其中有一个volatile的running变量,它控制了Worker的运行状态。在run()方法中,我们在一个while循环里不断打印“Working…”,并且每间隔1秒钟就休眠一下。在主函数中,我们创建了一个Worker对象,并启动一个线程来执行它的run()方法。再等待5秒后,我们调用了Worker对象的stop()方法,将running设置为了false。这样,Worker线程就会在下一次循环开始时退出循环,打印出“Worker stopped.”。

通过这个例子,我们可以看到如何利用实现Runnable接口的方式来控制线程的退出,这是通过共享变量来实现的。

总结一下,实现Runnable接口是一种创建线程的简单实用方式,可以避免单继承的限制、支持共享数据、更好的代码风格等优点,值得我们在Java多线程编程中加以运用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复