线程Thread类及Runnable接口
线程Thread类及Runnable接口
Thread类
1.Thread类在java.lang包中,使用时可以不用导包
2.Thread类实现了Runnable接口,线程操作时需要重写run()方法,
在run()方法中写线程操作的具体内容
3.调用线程时先创建线程对象,线程对象调用start()方法,
将线程添加到线程队列中
测试代码
package lesson01;
public class Demo01 extends Thread{
@Override
public void run(){ // 重写run()方法
for(int i = 1;i<=9;i++){
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" 小白---");
}
}
}
=======================================================
package lesson01;
public class Demo02 extends Thread{
@Override
public void run(){ // 重写run()方法
for(int i = 1;i<=9;i++){
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("小黑+++ ");
}
}
}
=======================================================
package lesson01;
public class Demo03 extends Thread{
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo01 d1 = new Demo01(); // 创建线程对象
Demo02 d2 = new Demo02(); // 创建线程对象
d1.start(); // 加入线程队列
d2.start(); // 加入线程队列
}
}
运行结果
Runnable接口
通过Runnable接口创建线程的步骤如下:
1、定义实现Runnable接口的类,并实现该类中的run()方法。
Thread在java.lang包中不用导入
2、建立一个Thread对象,并将实现的Runnable接口的类的对象作为参数传入Thread类的构造方法。
3、通过Thread类中的start()方法启动线程,并运行。
注:直接调用Thread类或Runnable类对象的run()方法是无法启动线程的,这只是一个简单的方法调用必须通过Thread方法中的start()才行。
测试代码
package ThreadA;
import javax.swing.*;
//线程实现窗口标语循环滚动Demo
public class MyFrameThread extends JFrame implements Runnable {
JLabel lb;
int x = 0;
//JTextField tf;
MyFrameThread(String s){
super(s);
setBounds(0,0,600,400);
// setLayout(new FlowLayout());
setLayout(null);
lb =new JLabel("欢迎学习java!");
lb.setBounds(x,150,200,50);
add(lb);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void run(){
while(true){
x++;
x=x%600; // 对窗体宽度取余 确保字母再次从左侧开始 也可使用getWidth()方法
lb.setBounds(x,150,200,50);
try {
Thread.sleep(50);
}catch(InterruptedException e){
System.out.println("出错了"+e.getMessage());
}
}
}
public static void main(String[] args) {
MyFrameThread mft=new MyFrameThread("学习Runnable"); // mft对象中有一个线程待启动
Thread t1=new Thread(mft); // 将mft对象添加到t1线程对象中
t1.start(); // t1线程对象加入到线程队列中
}
}
运行结果