实现线程的两种方式
《零基础学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; } } } }