如何创建线程,简单代码

1、实现线程的方法:(1)继承Thread类重写run方法

                                      (2)实现Runnable接口重写un方法

                                      (3)实现Callable接口通过FutureTask包装器来创建Thread线程

                                      (4)利用线程池(newCachedThreadPool、newFixedThreadPool )

1、继承Thread类

(1)线程类
public class MyThread extends Thread {  
  public void run() {       //不会创建新的线程,相当于只是一个普通方法,由当前线程来调用
   System.out.println("MyThread.run()");  
  }  
}  
(2)测试类
MyThread myThread1 = new MyThread();  
MyThread myThread2 = new MyThread();  
myThread1.start();   //会创建新的线程
myThread2.start();  

       start方法是创建了新的线程,在新的线程中执行
       run方法是在主线程中执行该方法,和调用普通方法一样

2、实现Runnable接口

当前类如果已经继承一个父类,可以通过实现Runnable接口实现线程的创建

(1)线程类

public class MyThread extends A implements Runnable {

         public void run() {

            System.out.println("线程执行");  

(2)测试类

   MyThread s1=new MyThread();

   Thread t1 =new Thread(s1);

    t1.start();

}

3、实现Callable接口

(1)线程类

public class MyThread  extends OtherClass implements Callable<Integer> {
 
public Integer call() throws Exception {
      return 1;
 }

(2)测试类

Callable<Integer> oneCallable = new SomeCallable<Integer>();   
//由Callable<Integer>创建一个FutureTask<Integer>对象:   
FutureTask<Integer> oneTask = new FutureTask<Integer>(oneCallable);   
//FutureTask<Integer>是一个包装器,它通过接受Callable<Integer>来创建,它同时实现了Future和Runnable接口。    
Thread oneThread = new Thread(oneTask);   
oneThread.start();     
   
4、 newCachedThreadPool线程池

(1)匿名类方式

      ExecuteService  a=Executors.newCachedThreadPool();
              a.execute(new Runnable(){
                        public void run(){
                                 System.out.println("一个线程");

                       }
              });

(2)普通类方式

测试类

          ExecutorService service = Executors.newFixedThreadPool(2);//包含2个线程对象

         MyRunnable r = new MyRunnable();
         service.submit(r);

线程类

public class MyRunnable implements Runnable {
    public void run() {
           System.out.println("一个线程");    
    }    
}
<think> 我们正在讨论Java创建线程执行代码的方法。根据引用内容,Java创建线程执行代码主要有两种基本方法:继承Thread类和实现Runnable接口。另外,引用[4]提到了Callable方式,但没有给出具体示例,所以这里主要讨论前两种方法。 引用[1]和[3]展示了通过继承Thread类并重写run()方法来创建线程。引用[2]和[5]展示了通过实现Runnable接口来创建线程。此外,引用[4]还提到Thread类的一些常用方法,如start(), getName(), sleep()等。 因此,回答应该包括以下内容: 1. 继承Thread类 2. 实现Runnable接口 3. 两种方法的对比和选择建议 4. 线程的启动(start()方法) 5. 简单介绍Thread类的常用方法(可参考引用[4]) 注意:用户要求的是“如何创建线程来执行代码”,所以重点放在创建和启动线程上。 我们将按照以下结构组织回答: 一、继承Thread类创建线程 1. 步骤 2. 示例代码(来自引用[1]) 二、实现Runnable接口创建线程 1. 步骤 2. 示例代码(来自引用[2]和[5]) 三、两种方法的比较 1. 继承Thread类的优缺点 2. 实现Runnable接口的优缺点 四、启动线程的正确方法(调用start()方法) 五、Thread类的常用方法简介(参考引用[4]) 最后,生成相关问题。 注意:引用标识要自然地添加在引用内容的末尾。 </think> ### Java创建线程执行代码的方法详解 在Java中创建线程执行代码主要有两种核心方法,每种方法都需要通过`start()`方法启动线程执行。以下是具体实现方式: #### 一、继承Thread类(直接创建线程) **实现步骤**: 1. 创建`Thread`类的子类 2. 重写`run()`方法(包含需要执行的代码) 3. 创建线程实例 4. 调用`start()`方法启动线程 **示例代码**: ```java class MyThread extends Thread { @Override public void run() { // 线程执行的代码 System.out.println("通过继承Thread执行任务"); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 启动线程[^1][^3] } } ``` **特点**: - 简单直接,适合简单任务 - 线程与任务强耦合(局限性) - 不符合"组合优于继承"原则 #### 二、实现Runnable接口(推荐方式) **实现步骤**: 1. 创建实现`Runnable`接口的类 2. 实现`run()`方法 3. 将Runnable实例传递给Thread构造器 4. 调用`start()`方法启动线程 **示例代码**: ```java class MyRunnable implements Runnable { @Override public void run() { // 线程执行的代码 System.out.println("通过Runnable执行任务"); } } public class Main { public static void main(String[] args) { MyRunnable task = new MyRunnable(); Thread thread = new Thread(task); // 传递Runnable对象 thread.start(); // 启动线程[^2][^5] } } ``` **优势**: - 线程与任务解耦(可复用任务对象) - 支持Lambda表达式简化代码: ```java new Thread(() -> System.out.println("Lambda线程")).start(); ``` - 适用于线程池等高级场景[^4] #### 三、两种方法对比 | **特性** | 继承Thread | 实现Runnable | |------------------|------------------------|------------------------| | 代码耦合度 | 高(线程与任务绑定) | 低(线程与任务分离) | | Java单继承限制 | 占用继承名额 | 不占用继承名额 | | 资源共享能力 | 需static变量共享 | 天然支持实例变量共享 | | JDK8+代码简洁度 | 较冗长 | 支持Lambda表达式简化 | #### 四、线程启动关键要点 1. **必须调用`start()`方法**(而非直接调用`run()`) - `start()`:启动新线程并行执行 - `run()`:普通方法调用(在主线程执行) 2. **线程命名方法**: ```java Thread thread = new Thread(task, "自定义线程名"); // 通过构造器命名 thread.setName("Worker-1"); // 通过方法命名[^4] ``` 3. **获取当前线程**: ```java Thread current = Thread.currentThread(); System.out.println(current.getName() + "正在执行"); ``` > **最佳实践**:优先选择`Runnable`接口方式,因其更好的灵活性和扩展性,符合现代Java开发规范[^2][^5]。 --- ### 相关问题 1. 为什么直接调用`run()`方法不会创建线程? 2. 如何在多个线程间安全地共享数据? 3. Java 8的Lambda表达式如何简化Runnable实现? 4. 继承Thread类的方式在哪些特殊场景下仍有优势? 5. 线程的`start()`方法内部具体执行了什么操作? [^1]: 继承Thread类创建线程 [^2]: 实现Runnable接口创建线程 [^3]: 重写run()方法定义线程任务 [^4]: Thread类常用方法及命名规范 [^5]: Runnable实现类的标准使用方式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值