面向对象程序设计(并发)

发布时间:2023年12月27日

所谓并发,就是指一个系统中同时存在多个活动实体,比如线程。它们共享系统的资源,但是彼此之间又要独立运行。就像一群可爱的小蚂蚁,大家在同一个土堆里忙碌,但每只蚂蚁都有自己的任务。

在Java里,我们可以使用Thread类或者实现Runnable接口来创建线程。当然,Java也提供了更高级的并发工具,比如Executor框架和Future接口,让并发编程变得更加方便。

public class ConcurrentAnts {

    public static void main(String[] args) {
        System.out.println("欢迎来到并发的蚂蚁世界!(^?^)っ");

        // 创建一群蚂蚁线程
        Thread ant1 = new Thread(new Ant("小蚂蚁1"));
        Thread ant2 = new Thread(new Ant("小蚂蚁2"));
        Thread ant3 = new Thread(new Ant("小蚂蚁3"));

        // 启动蚂蚁们
        ant1.start();
        ant2.start();
        ant3.start();
    }
}

class Ant implements Runnable {
    private String name;

    public Ant(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(name + "正在搬运食物,第" + i + "次!(^?^)");
            try {
                Thread.sleep(1000); // 模拟搬运食物的过程
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(name + "的任务完成啦!?(???。)?");
    }
}

run()start() 方法是多线程编程中非常关键的两个方法,让我们一起了解一下:

run() 方法:

  • 定义线程的执行体: run() 方法是用来定义线程实际执行的任务逻辑的地方。

  • 普通方法调用: 如果直接调用 run() 方法,那么它就会像普通的方法一样在当前线程中执行,并不会创建新的线程。

  • 不会启动新线程: 当我们通过 thread.run() 调用时,任务会在当前线程中执行,不会启动新的线程,不具备并发的效果。

start() 方法:

  • 启动线程: start() 方法是用来启动一个新线程,并调用线程的 run() 方法。

  • 创建新线程: 当我们调用 thread.start() 时,会创建一个新的线程,并在新线程中执行 run() 方法。

  • 并发执行: 启动新线程后,新线程和当前线程可以并发执行,达到多线程的效果。

下面是一个简单的例子,演示了 run()start() 的区别:

class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getId() + " Value " + i);
        }
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();

        // 使用 run() 方法,不会启动新线程
        myThread.run();

        // 使用 start() 方法,启动新线程
        myThread.start();
    }
}

run() 方法是Thread类中用于定义线程执行体的方法,是一个约定俗成的命名规则,不能写成其他的名字,否则编译器会认为你没有实现Runnable接口的run方法,从而导致编译错误。

休眠

(^?^)っ 在Java中,线程的休眠可以通过 Thread.sleep() 方法来实现。这个方法允许你让当前正在执行的线程休眠指定的时间(以毫秒为单位)。

下面是一个简单的例子,展示了如何在Java中使用 Thread.sleep() 来使线程休眠

public class SleepExample {
    public static void main(String[] args) {
        System.out.println("开始执行...");

        try {
            // 休眠 3 秒
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("休眠结束,继续执行!");
    }
}

并发访问同一个资源可能会出现问题,建议加入同步synchronized。

文章来源:https://blog.csdn.net/hhxxttx_/article/details/135249321
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。