Java 多种线程的创建方法
1:new Thread().start();
new Thread() {
public void run() {
//需要执行耗时的事件
}.start();
new Thread() 方法被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪,不利于扩展。
优点:书写简单
缺点:只能执行一次,复用性不高。
2:extends Thread
class MyThread extends Thread {
//调用父类带参数的构造方法
MyThread (Object obj){
super(obj);
}
@Override
public void run() {
}
}
.....
Thread myThread1 = new MyThread(); // 创建一个新的线程
myThread1.start();
优点:比起1,2的方法可以多次创建,调用,创建灵活
缺点:扩展性不强,线程继承了Thread类,不能再继承其他父类
**3**implements Runnable
class myRunable implements Runnable {
private int shareResource;//共享资源
@Override
public void run() {
}
}
......
myRunable loadRunnable = new myRunable ();
Thread myThread1 = new Thread(loadRunnable);
Thread myThread2 = new Thread(loadRunnable);
myThread1 .start();
myThread2 .start();
优点:创建一个资源,可以供多个线程来执行
缺点:书写复杂
Thread主要函数
run() //线程运行时所执行的代码
start() //启动线程
sleep(long millis) //线程休眠,交出CPU,让CPU去执行其他的任务,然后线程进入阻塞状态,sleep方法不会释放锁
yield() //使当前线程交出CPU,让CPU去执行其他的任务,但不会是线程进入阻塞状态,而是重置为就绪状态,yield方法不会释放锁
join(long millis) //等待线程终止,直白的说 就是发起该子线程的线程 只有等待该子线程运行结束才能继续往下运行
wait() //交出cpu,让CPU去执行其他的任务,让线程进入阻塞状态,同时也会释放锁
interrupt() //中断线程,自stop函数过时之后,我们通过interrupt方法和isInterrupted()方法来停止正在运行的线程,注意只能中断已经处于阻塞的线程
getId() //获取当前线程的ID
getName() //获取线程的名
setName() //设置线程的名
getPriority() //获取线程的优先级 一般用1-10的整数表示,默认优先级是5,优先级最高是10,优先级高的线程被执行的机率高
setPriority() //设置线程优先级
setDaemon()//设置为守护线程
isDaemo() //判断是否是守护线程
currentThread()//静态函数获取当前线程