Java中线程的实现方式
方式一、继承Thread
使用步骤:
1.定义类继承Thread
2.重写run方法
3.把新线程要做的事写在run方法中
4.创建线程对象
5.开启新线程, 内部会自动执行run方法
//方式一、继承Thread
//使用步骤:
//1.定义类继承Thread
//2.重写run方法
//3.把新线程要做的事写在run方法中
//4.创建线程对象
//5.开启新线程, 内部会自动执行run方法
class MyThread extends Thread {
@Override
public void run() {
System.out.println("我的线程:" + Thread.currentThread());
}
}
class Main(){
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
匿名内部类方式
new Thread() {
public void run() {
for(int i=0;i<10;i++)
{
System.out.println("你的线程:" + Thread.currentThread());
try {
//子线程休眠
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
方式二、实现Runnable接口
实现步骤:
1.定义类实现Runnable接口
2.实现run方法
3.把新线程要做的事写在run方法中
4.创建自定义的Runnable的子类对象,创建Thread对象传入Runnable
5.调用start()开启新线程, 内部会自动调用Runnable的run()方法
//方式二、实现Runnable接口
//实现步骤:
//1.定义类实现Runnable接口
//2.实现run方法
//3.把新线程要做的事写在run方法中
//4.创建自定义的Runnable的子类对象,创建Thread对象传入Runnable
//5.调用start()开启新线程, 内部会自动调用Runnable的run()方法
class Task implements Runnable {
@Override
public void run() {
System.out.println("任务:" + Thread.currentThread());
}
}
class Main(){
public static void main(String[] args) {
Task Task = new Task();
Thread thread = new Thread(Task);
thread.start();
}
}
匿名内部类方式
new Thread( new Runnable() {
@Override
public void run() {
System.out.println("他的线程:"+Thread.currentThread());
}
}) {
}.start();
线程的一些方法
获取线程名字和设置名字
通过Thread的getName()方法获取线程对象的名字
通过setName(String)方法可以设置线程对象的名字
通过构造函数可以传入String类型的名字
每个线程系统都会默认分配个名字,主线程:main,子线程thread-0
获取当前线程的对象
Thread.currentThread()方法用于获取当前线程对象
在不同的方法中,获取的线程对象名称是有可能不一样的
在main中获取的是主线程对象
在子线程的run方法中获取的是子线程对象
程休眠(掌握)
Thread.sleep(毫秒), 控制当前线程休眠若干毫秒
1秒= 1000毫秒
1秒 = 1000毫秒* 1000微妙 * 1000纳秒(1000000000 )
守护线程(了解)
setDaemon(), 设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出
特点:男守护女,女的死,男的也不想活了
加入线程(了解)
join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续
join(int), 可以等待指定的毫秒之后继续
线程让出(了解)
yield() 让出cpu
线程优先级
setPriority()设置线程的优先级
默认优先级是5,最小优先级1,最高优先级10
可以设置2,3,4
Thread里面有静态常量