Thread线程-创建线程的3种方式

本文介绍了Java中创建线程的三种方法:通过继承Thread类、实现Runnable接口以及使用匿名内部类。并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程:用来同时执行多个任务使用。 线程的运行是并发的。
创建线程的3种方式:
第1种创建线程的方式:定义一个类,并继承Thread,重写run方法。run方法中就可以定义当前线程要执行的任务了。然后调用该线程的start()方法就启动的该线程。
例1:
一个类中可以有多个类。但是public修饰的类只有一个。

package day04;
/**
 * 线程:用来同时执行多个任务使用。 线程的运行是并发的。 
 * 创建线程有两种方式。
 */
public class ThreadDemo1 {
    public static void main(String[] args) {
        Thread t1 = new MyThread1();
        Thread t2 = new MyThread2();
        /*
         * 启动线程不要去直接调用线程的run方法,因为该方法是线程要执行的任务。而我们要调用的是start方法。该方法的作用是将 当前线程纳入到线程调度中,使其具有可以并发执行的能力。
         * start方法调用完毕后,线程处于runnable状态。只要它被分配了CPU的时间片,就会开始运行,这时它会自动调用run方法。
         */
        t1.start();
        t2.start();
    }
}
/**
 * 第一种创建线程的方式:定义一个类,并继承Thread,重写run方法。 run方法中就可以定义当前线程要执行的任务了。
 * @author Administrator
 */
class MyThread1 extends Thread{
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println("你是谁啊?");
        }   
    }
}
class MyThread2 extends Thread{
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println("我是查水表的!");
        }   
    }
}

第2种创建线程的方式:自定义一个类实现Runnable接口,重写run方法,并定义线程要执行的任务。创建线程的同时指派任务并启动线程开始工作。

package day04;
/**
 * 第二种创建线程的方式实现Runnable接口,并定义线程要执行的任务。创建线程的同时指派任务并启动线程开始工作。
 * 
 * 第一种创建线程的方式的不足:
 * 1:线程内部的run方法定义了线程要执行的任务。这就导致了线程与线程的任务有一个强耦合关系。不利于线程的重用。
 * 2:由于java是单继承的,这就导致我们若需要继承某个父类,同时又需要并发运行,就导致我们无法同时继承两个类。  
 */
public class ThreadDemo2 {
    public static void main(String[] args) {
        /* 创建线程要执行的任务
         */
        Runnable r1 = new MyRunnable1();
        Runnable r2 = new MyRunnable2();
        /* 创建线程,同时指派任务
         */
        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);
        t1.start();
        t2.start();
    }
}
/**
 * 定义该类并实现Runnbale接口,用来指定线程要完成的任务
 * @author Administrator
 */
class MyRunnable1 implements Runnable{
    public void run() {
        for(int i=0;i<1000;i++){
            System.out.println("你是谁啊?");
        }
    }
}
class MyRunnable2 implements Runnable{
    public void run() {
        for(int i=0;i<1000;i++){
            System.out.println("我是查水表的!");
        }
    }
}

第3种创建线程的方式,使用匿名内部类方式:

package day04;
/**
 * 使用匿名内部类的形式创建线程
 */
public class ThreadDemo3 {
    public static void main(String[] args) {
        /*
         * 第一种创建线程的形式
         */
        Thread t1 = new Thread(){
            public void run(){
                for(int i=0;i<1000;i++){System.out.println("你是谁啊?");}
            }
        };
         /*
         *  第二种创建线程的方式
         */
        Runnable runn = new Runnable(){
            public void run(){
                for(int i=0;i<1000;i++){System.out.println("我是查水表的!");}
            }
        };
        Thread t2 = new Thread(runn);
        t1.start();
        t2.start();
    }
}

例4:使用Runnable创建线程的方式实现JFrame对话框背景颜色切换实例:

package day04;

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * 测试Runnable
 * @author Administrator
 *
 */
public class TestRunnable extends JFrame implements Runnable{

    @Override
    public void run() {
        int i=0 ;
        JPanel panel=new JPanel();
        panel.setSize(300, 300);
        this.setContentPane(panel);
        while(true){
            i= i==0?1:0;
            if(i==0){
                panel.setBackground(Color.BLACK);
            }else{
                panel.setBackground(Color.WHITE);
            }
        }
    }

    public static void main(String[] args) {
        TestRunnable r=new TestRunnable();
        r.setSize(300,300);
        r.setVisible(true);
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Thread t=new Thread(r);
        t.start();
    }

}

运行效果:

![这里写图片描述](https://img-blog.youkuaiyun.com/20170306184357314?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzE0NTE0NzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值