一.创建多线程方式一:
创建一个子线程 实现输出0-100
* 1.第一种方式:继承Thread
* 2.实现步骤:
* ①.创建一个字类继承于Thread类
* ②.重写run()方法
* ③.创建字类对象
* ④.启动线程使用start()方法
class SubThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
};
}
public class TestThread {
public static void main(String[] args) {
SubThread st1 = new SubThread();
SubThread st2 = new SubThread();
st1.start();
st2.start();
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
Thread类常用的接口
* 1.start():启动线程并执行相应的run()方法
* 2.run()方法:子线程需要执行的代码放入run()方法中
* 3.currentThread():获取当前线程
* 4.getName():获取子线程的名称
* 5.setName():设置子线程的名称
* 6.yield():调用此方法的线程释放cpu的执行权:当一个线程使用了此方法后,就会把自己的cou执行时间让掉,让自己或者其他的线程运行
* 注意:是让自己或者其他线程运行并不是单纯的让给其他线程。
* 7.join():在子线程1中调用线程2的join()方法,表示执行到此方法时,线程1停止执行(阻塞),直到线程2执行完毕后,线程1再接着join()方法后的代码执行
* 8.sleep(long l): 1s = 1000ms 让当前线程睡眠
* 9.isAlive():判断当前线程是否存活
优先级:
* 默认值为:5 最小值:1 最大值:10
* ①.getPriority():获取优先级
* ②.setPriority():设置优先级
线程通信方法:
* ①.wait():等待:调用此方法的线程释放共享资源的锁,然后从运行状态退出,进入等待队列,直到被唤醒。
* ②.notify():唤醒等待的线程:可以唤醒等待队列中第一个等待同一共享资源的线程,并使该线程退出等待队列,进入可运行状态
* ③.notifyAll():唤醒所有等待的线程:可以使所有的正在等待队列中同一共享资源的线程从等待队列状态退出,进入可运行状态。
* 以上三个方法都不属于Thread类,而是属于Object类,也就是说每个对象都有这三个功能。
二.创建多线程的方式二:使用实现的方式
* 1.语法:class thread implements Runnable
* 2.步骤:
* ①.创建一个实现Runnable接口的类
* ②.重写Runnable接口中的run()方法
* ③.创建一个Runnable接口实现类的对象
* ④.将子类对象作为形参传递给Thread类的构造器
* ⑤.调用start()方法 启动线程
* 3.优点:
* ①.实现的方式避免了java单继承的局限性
* ②.多个线程要操作同一个共享资源,更适合使用实现的方式
class PrintNum implements Runnable{
@Override
public void run() {
for (int i = 1; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public class TestThread2 {
public static void main(String[] args) {
PrintNum p = new PrintNum();
Thread t1 = new Thread(p);
Thread t2 = new Thread(p);
t1.start();
t2.start();
}
}