📜  创建线程的Java程序

📅  最后修改于: 2022-05-13 01:54:29.486000             🧑  作者: Mango

创建线程的Java程序

线程可以称为轻量级进程。线程使用更少的资源来创建和存在于进程中;线程共享进程资源。 Java的主线程是程序启动时启动的线程。从线程是作为主线程的结果创建的。这是完成执行的最后一个线程。

可以通过以下方式以编程方式创建线程:

  1. 实现Java.lang.Runnable 接口。
  2. 扩展Java.lang.Thread 类。

您可以通过实现可运行接口并覆盖 run() 方法来创建线程。然后,您可以创建一个线程对象并调用 start() 方法。

线程类:

Thread 类提供用于创建和操作线程的构造函数和方法。该线程扩展了 Object 并实现了 Runnable 接口。



// start a newly created thread.
// Thread moves from new state to runnable state
// When it gets a chance, executes the target run() method
public void start()  

可运行界面:

任何具有打算由线程执行的实例的类都应该实现 Runnable 接口。 Runnable 接口只有一种方法,称为 run()。

// Thread action is performed
public void run() 

创建线程的好处:

  • 与进程相比, Java线程更轻量级;创建线程所需的时间和资源更少。
  • 线程共享其父进程的数据和代码。
  • 线程通信比进程通信简单。
  • 线程之间的上下文切换通常比进程之间的切换便宜。

调用 run() 而不是 start()

常见的错误是使用 run() 而不是 start() 方法启动线程。

Thread myThread = new Thread(MyRunnable());
  myThread.run();  //should be start();

您创建的线程不会调用 run() 方法。相反,它由创建myThread的线程调用

示例 1:通过使用线程类

Java
import java.io.*;
class GFG extends Thread {
    public void run()
    {
        System.out.print("Welcome to GeeksforGeeks.");
    }
    public static void main(String[] args)
    {
        GFG g = new GFG(); // creating thread
        g.start(); // starting thread
    }
}


Java
import java.io.*;
class GFG implements Runnable {
    public static void main(String args[])
    {
        // create an object of Runnable target
        GFG gfg = new GFG();
  
        // pass the runnable reference to Thread
        Thread t = new Thread(gfg, "gfg");
  
        // start the thread
        t.start();
  
        // get the name of the thread
        System.out.println(t.getName());
    }
    @Override public void run()
    {
        System.out.println("Inside run method");
    }
}


输出
Welcome to GeeksforGeeks.

示例 2:通过实现 Runnable 接口

Java

import java.io.*;
class GFG implements Runnable {
    public static void main(String args[])
    {
        // create an object of Runnable target
        GFG gfg = new GFG();
  
        // pass the runnable reference to Thread
        Thread t = new Thread(gfg, "gfg");
  
        // start the thread
        t.start();
  
        // get the name of the thread
        System.out.println(t.getName());
    }
    @Override public void run()
    {
        System.out.println("Inside run method");
    }
}
输出
gfg
Inside run method