实现线程的两种方式

《零基础学Java》


  • 实现线程的两种方式

    Java提供了两种方式实现线程,分别为继承 java.lang.Thread类实现 java.lang.Rumnable接口

  • 继承Thread类

    Thread类 是 java.lang包 中的一个类,Thread类的对象用来代表线程,通过继承Thread类创建、启动并执行一个线程。

    Thread类的常用方法:

继承Thread类 实例:

public class Demo {
public static void main(String[] args) {
Thread a = new ThreadA();
a.start();
Thread b = new ThreadB();
b.start();
}
}
class ThreadA extends Thread{//ThreadA 继承 Thread类
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(i);
try {
Thread.sleep(1000);//休眠(停顿)1000毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class ThreadB extends Thread{//ThreadB 继承 Thread类
@Override
public void run() {
for (char i = 'a'; i < 'z'; i++) {
System.out.println(i);
try {
Thread.sleep(1000);//休眠(停顿)1000毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
  • 实现Runnable接口

    如果当前类不仅要继承其他类(非Thread类),还要实现多线程,那么只能通过当前类实现Runnable接口创建Thread类对象

    实现Runnable接口的程序会创建一个Thread对象,并将Runnable接口的对象target作为其运行对象。

    Thread类的构造方法:

    构造方法 介绍
    public Thread(Runnable target); 创建一个新的 Thread 对象。
    public Thread(Runnable target , String name); 创建一个新的 Thread 对象,并指定名字。

    实现Runnable接口 实例:

    import javax.swing.*;
    import java.awt.*;
    public class Demo1 extends JFrame implements Runnable {
    private JLabel jLabel = new JLabel();
    private int count = 0;
    private Container c = getContentPane();
    public Demo1(){
    setBounds(400,200,250,100);
    c.setLayout(null);
    try{
    Icon icon = new ImageIcon("src/setting.png");
    jLabel.setIcon(icon);
    }catch (NullPointerException e){
    System.out.println("图片不存在");
    return;
    }
    jLabel.setHorizontalAlignment(SwingConstants.LEFT);
    jLabel.setBounds(10,10,200,50);
    jLabel.setOpaque(true);
    c.add(jLabel);
    setVisible(true);
    }
    public static void main(String[] args) {
    Demo1 demo1 = new Demo1();
    Thread thread = new Thread(demo1);
    thread.start();
    }
    @Override
    public void run() {
    int i = 10;
    while (true){
    jLabel.setBounds(i,10,200,50);
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    i+=5;
    if (i>=200){
    i=10;
    }
    }
    }
    }
posted on   TeaTracing  阅读(186)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示