ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java用thread创建多线程

2024-01-10 21:56:57  阅读:40  来源: 互联网

标签:


在 Java 中,可以使用 Thread 类来创建和管理多线程。

首先,创建一个继承自 Thread 类的子类,并重写 run() 方法。run() 方法里面包含了线程的主要逻辑。示例如下:

public class MyThread extends Thread {
    @Override
    public void run() {
        // 线程的主要逻辑
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread " + i);
        }
    }
}

Java

接下来,在需要创建线程的地方,实例化子类对象,并调用 start() 方法启动线程。示例如下:

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 启动线程

        // 主线程的逻辑
        for (int i = 0; i < 10; i++) {
            System.out.println("Main " + i);
        }
    }
}

Java

运行上述代码,会同时启动一个子线程和主线程,并且两个线程会交替执行各自的逻辑,输出结果可能是类似下面的样子:

Main 0
Thread 0
Thread 1
Main 1
Thread 2
Main 2
Thread 3
Main 3
Thread 4
Main 4
Thread 5
Main 5
Thread 6
Main 6
Thread 7
Main 7
Thread 8
Main 8
Thread 9
Main 9

需要注意的是,每个线程都会创建一个独立的执行栈,并且线程之间共享堆内存中的数据。因此,在多线程编程中,需要注意各个线程之间的同步问题,以避免数据不一致或竞态条件等问题的发生。

 

以下是用 Thread 类创建多个线程的示例:

public class Main {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new MyRunnable());
        Thread thread2 = new Thread(new MyRunnable());
        
        thread1.start();
        thread2.start();
        
        // 主线程的逻辑
        for (int i = 0; i < 10; i++) {
            System.out.println("Main Thread " + i);
        }
    }
}

class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程的主要逻辑
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread " + Thread.currentThread().getId() + " " + i);
        }
    }
}

Java

在上面的示例中,我们创建了两个线程 thread1 和 thread2,它们都是通过传递一个实现 Runnable 接口的对象来实例化的。MyRunnable 类实现了 Runnable 接口,并重写了 run() 方法来定义线程的主要逻辑。

在 main() 方法中,我们启动了两个线程 thread1 和 thread2,并让它们同时执行各自的 run() 方法。同时,主线程也会按照自己的逻辑执行,输出结果可能类似以下内容:

Main Thread 0
Thread 10 0
Thread 11 0
Thread 10 1
Main Thread 1
Thread 10 2
Thread 11 1
Thread 10 3
Thread 11 2
Main Thread 2
Thread 11 3
Thread 10 4

需要注意的是,每个线程都会创建一个独立的执行栈,并且线程之间共享堆内存中的数据。因此,在多线程编程中,需要注意各个线程之间的同步问题,以避免数据不一致或竞态条件等问题的发生。

 

在 Java 中,你可以通过以下两种方式来向线程传递参数:

  1. 使用构造函数传参:可以在实例化线程对象时通过构造函数向线程传递参数。
public class Main {
    public static void main(String[] args) {
        Thread thread1 = new MyThread("Thread 1");
        Thread thread2 = new MyThread("Thread 2");
        
        thread1.start();
        thread2.start();
    }
}

class MyThread extends Thread {
    private String threadName;
    
    public MyThread(String threadName) {
        this.threadName = threadName;
    }
    
    @Override
    public void run() {
        System.out.println("Hello from " + threadName);
    }
}

Java

在上面的示例中,我们创建了两个 MyThread 的实例,通过构造函数将不同的线程名传递给每个线程对象。在 run() 方法中,我们使用这些传递的参数来打印出线程的问候语。

  1. 在线程类内部设置参数,并提供公共的设置方法:可以在线程类内部定义一些参数,并提供公共的方法来设置参数。
public class Main {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();
        
        thread1.setName("Thread 1");
        thread2.setName("Thread 2");
        
        thread1.start();
        thread2.start();
    }
}

class MyThread extends Thread {
    private String threadName;
    
    public void setName(String threadName) {
        this.threadName = threadName;
    }
    
    @Override
    public void run() {
        System.out.println("Hello from " + threadName);
    }
}

Java

在上面的示例中,我们在 MyThread 类中定义了一个成员变量 threadName,并提供了 setName() 方法来设置该变量的值。在 main() 方法中,我们实例化 MyThread 对象,并分别调用 setName() 方法为每个线程设置不同的名称。然后,我们启动这些线程,每个线程都会打印出相应的问候语。

无论是使用构造函数传参还是设置参数的方式,都可以将需要传递的参数传递给线程对象,并在 run() 方法内部使用这些参数来进行相关的操作。

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有