一、方式一:继承Thread类创建线程
步骤:
- 1.继承Thread类
- 2.重写run()方法
- 3.创建线程子类对象
- 4.调用start()方法启动线程
代码示例:
public class Creat_Thread {
public static void main(String[] args) {
MyThread myThread = new MyThread();// 3 创建子类
myThread.start();// 4 调用start:①启动线程,②调用run()方法
// 问题一:不能直接调用run()方法启动线程
// 问题二:不能重复启动线程
System.out.println("python");
}
}
class MyThread extends Thread{
// 1 继承Therad类
// 2 重写run()方法
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"-"+i);
}
}
}
练习:
/**
- @author xhj
- 题目:创建两个线程,一个遍历100以内基数、一个遍历100以内偶数
*/
public class Thread_test01 extends Thread{
public static void main(String[] args) {
// 使用匿名内部类创建线程
new Thread_test01(){
// 重写run()方法
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0){
System.out.println(Thread.currentThread().getName()+"--"+"偶数是:"+i);
}
}
}
}.start();// 启动线程,调用run()
new Thread_test01(){
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if (i % 2 != 0){
System.out.println(Thread.currentThread().getName()+"--"+"基数是:"+i);
}
}
}
}.start();
}
}
Thread类常用方法:
- start():启动当前线程,并且调用run()
- run():通常需要重写父类中的run(),将自己要执行的业务代码操作写在里面
- currentThread():静态方法,返回执行当前代码的线程
- getName():获取当前线程的名字
- setName():设置当前线程的名字
- yield():释放当前cpu的执行权
- join():在线程a中调用join(),a线程将进入阻塞状态,只有当线程b执行完成后,线程a才继续执行。
- stop():强制结束当前线程
- sleep(long millitime):让当前线程睡眠多少毫秒,进入阻塞转态
- isAlive():判断当前线程是否存活
设置线程的优先级:
1、Java源码中定义的三个默认级别:
也可以自己设置1~10之间的级别,级别越高,cpu的执行权也高,但也不是百分之百优先。只是大概率的会先执行。
2、获取和设置线程的优先级
getPriority():获取线程的优先级
setPriority():设置线程的优先级
二、方式二:实现Runnable接口创建线程
步骤:
- 创建一个实现Runnable接口的类
- 重写run()
- 创建一个Thread类,将实现了Runnable接口的类的实例作为参数
- 调用start()
代码示例:
/**
* @author xhj
* 1.创建一个实现Runnable接口的类
* 2.重写run()
* 3.创建一个Thread类,将实现了Runnable接口的类的实例作为参数
* 4.调用start()
*/
public class Creat_Runnable {
public static void