欢迎访问宙启技术站
智能推送

Java多线程函数:如何创建、启动和管理多线程?

发布时间:2023-06-20 23:52:32

Java 多线程是指同时执行多个线程的能力。一个程序实现了多线程之后,就能同时运行多个线程,让程序实现多任务处理,提高程序的执行效率,实现更多复杂的操作。 Java 多线程可以使用 Thread 类或 Runnable 接口进行创建和管理。

创建多线程

创建多线程有两种方式:继承 Thread 类和实现 Runnable 接口。 Java 线程是通过实现 Runnable 接口或继承 Thread 类实现的。下面是创建多线程的代码实例:

通过继承 Thread 类实现多线程:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.start();
    }
}

通过实现 Runnable 接口实现多线程:

public class MyRunnable implements Runnable {
    public void run()  {
        System.out.println("MyRunnable is running");
    }
    public static void main(String args[]) {
        MyRunnable obj = new MyRunnable();
        Thread t1 = new Thread(obj);
        t1.start();
     }
}

启动多线程

启动多线程需要使用 start() 方法。调用 start() 方法会新建一个线程并开始执行 run() 方法。如果直接调用 run() 方法,则仅仅是一个普通的方法而已,不会开启新的线程。

通过继承 Thread 类实现多线程:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.start(); //调用 start() 方法,新建一个线程并开始执行 run() 方法
    }
}

通过实现 Runnable 接口实现多线程:

public class MyRunnable implements Runnable {
    public void run()  {
        System.out.println("MyRunnable is running");
    }
    public static void main(String args[]) {
        MyRunnable obj = new MyRunnable();
        Thread t1 = new Thread(obj);
        t1.start(); //调用 start() 方法,新建一个线程并开始执行 run() 方法
     }
}

管理多线程

Java 多线程管理可以通过 Thread 类和 Runnable 接口中提供的方法来实现。下面是一些常用方法的详细介绍:

设置线程名称

可以通过调用 setName() 方法来设置线程的名称。下面是一个实例:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.setName("Thread1"); //设置线程名称
        t1.start();
    }
}

设置线程优先级

可以通过调用 setPriority() 方法来设置线程的优先级。Java 中线程的优先级范围是 1-10,10 是最高优先级。下面是一个实例:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.setPriority(8); //设置线程的优先级为 8
        t1.start();
    }
}

等待线程

可以通过调用 join() 方法来等待线程执行完毕。在一个线程中调用另一个线程的 join() 方法将会使执行当前线程的代码块暂停,直到另一个线程执行完毕后再继续执行。下面是一个实例:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("MyThread is done");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.start();
        try {
            t1.join(); //等待 t1 线程执行完毕
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("All done");
    }
}

暂停线程

可以通过调用 suspend() 方法暂停线程的执行。调用 suspend() 方法将会使线程的执行暂停,但是该线程所持有的资源和锁并不会被释放,所以该方法容易引发死锁和其他线程同步问题。下面是一个实例:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("MyThread is done");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.start();
        t1.suspend(); //暂停 t1 线程的执行
        System.out.println("All done");
    }
}

恢复线程

可以通过调用 resume() 方法来恢复线程的执行。调用 resume() 方法将会使线程继续执行,但是该方法容易引发死锁和其他线程同步问题。下面是一个实例:

public class MyThread extends Thread {
    public void run()  {
        System.out.println("MyThread is running");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("MyThread is done");
    }
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.start();
        t1.suspend(); //暂停 t1 线程的执行
        t1.resume(); //恢复 t1 线程的执行
        System.out.println("All done");
    }
}

总结

Java 的多线程能力便于程序员处理多个任务并行执行。创建多线程可以通过 Thread 类或者 Runnable 接口,启动一个新的线程需要使用 start() 方法,而管理多线程的方法包括设置线程名称、设置线程优先级、等待线程、暂停线程和恢复线程。正确运用多线程,可以在提高系统并发处理性能的同时,降低系统响应时间,提供更加流畅和人性化的用户体验。