- run方法 :此方法一般需要我们手动的进行重写,将创建线程需要执行的操作放入此方法中
- start方法:启动当前的线程,调用当前线程的run方法
- currentThread( ):此方法是一个静态方法,可以直接用Thread.方法名的格式,返回的当前正在执行的代码线程名
- setName/getName:设置/得到当前线程的名字 设置线程名要在start方法之前设置 (设置线程名称的方法还可以直接在构造器传值的方式设置)
public static void main(String[] args)
{
MyThread2 myThread2 =new MyThread2();
//设置线程名字的方法二
// MyThread2 myThread2 =new MyThread2("线程一");
myThread2.setName("线程一");
myThread2.start();
}
}
class MyThread2 extends Thread{
@Override
public void run()
{
for (int i = 0; i <=10 ; i++)
{
System.out.println(Thread.currentThread().getName() + "\t"+i);
}
}
}
- yield(): 释放当前cpu的执行权 (下一次执行可能还是释放掉的线程强到)
- join(); 在线程a中调用线程b中的join方法,那么线程a将进行阻塞状态,一直需要等待线程b执行完毕之后线程a才再次启动
举例: 在主线程main中,存在线程MyThread2,在主线程中调用了MyThread2线程中join方法,那么main方法循环到50的时候必须等MyThread2线程执行完毕之后才再次执行
public class ThreadTest2{
public static void main(String[] args)
{
MyThread2 myThread2 =new MyThread2();
myThread2.setName("线程一");
myThread2.start();
for (int i = 0; i <100 ; i++)
{
System.out.println(Thread.currentThread().getName() + "\t"+i);
if(i == 50){
try
{
myThread2.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
class MyThread2 extends Thread{
@Override
public void run()
{
for (int i = 0; i <100; i++)
{
System.out.println(Thread.currentThread().getName() + "\t"+i);
}
}
}
运行结果
8. stop:强制结束当前线程
9. sleep:让线程进入休眠状态 单位是毫秒。
10.isAlive() ; 判断线程是否好存活
优先级问题
1.线程默认的优先级
MAX_PRIORITY: 10
MIN_ PRIORITY: 1
NORM_PRIORITY: 5 线程默认的优先级
2.获取和设置当前线程的优先级
getPriority():获取线程的优先级
setPriority(int p): 设置线程的优先级
3.说明:高优先级的线程要抢占低优先级线程cpu的执行权。但是只是从概率上讲,高优先级的线程高概率的情况下被执行。并不意味着只有当高优先级的线程执行完以后,低优先级的线程才执行。