Java如何创建多线程程序?

线程是在自己的线程上运行的程序执行单元。多线程是Java语言创建时所具有的核心功能。可以说,这种多线程功能就像在CPU上运行每个程序一样,尽管计算机仅安装了一个CPU。

要使用Java创建Thread程序,我们可以扩展java.lang.Thread类并重写run()方法。但是我们知道Java类只能从单个类扩展,而扩展Thread类使我们的类不能从另一个类继承。为了解决此问题,引入了一个接口java.lang.Runnable。

让我们在下面看到简化的演示类。在下面的程序中,我们将有三个独立的线程执行,即主线程,线程1和线程2。

package org.nhooo.example.lang;

public class ThreadDemo extends Thread {
    public static void main(String[] args) {
        // 创建此类的实例。
        ThreadDemo thread1 = new ThreadDemo();

        // 创建一个可运行的对象。
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 5; i++) {
                    sayHello();
                }
            }
        });

        // 设置线程优先级,正常的线程优先级为5。
        thread1.setPriority(4);
        thread2.setPriority(6);

        // 开始执行线程1和线程2
        thread1.start();
        thread2.start();

        for (int i = 0; i < 5; i++) {
            sayHello();
        }
    }

    public void run() {
        for (int i = 0; i < 5; i++) {
            sayHello();
        }
    }

    /**
     * The synchronized modifier ensure that two threads cannot execute the block
     * at the same time.
     */
    private static synchronized void sayHello() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread [" + Thread.currentThread().getName() +  "] ==> Hi...");
        }

        try {
            // 使当前正在执行的线程随机睡眠
            // 毫秒
            Thread.sleep((long) (Math.random() * 1000 + 1000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 使当前正在执行的线程对象暂时暂停
        // 并允许其他线程执行。
        Thread.yield();
    }
}