多线程|Thread创建多线程笔记
Thread创建多线程步骤:
- 多线程的创建:方式一:继承Thread类
- 1.创建一个继承于Thread类的子类
- 2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
- 3.创建Thread类的子类对象
- 4.通过此对象调用start()方法
/*
* 多线程的创建:方式一:继承Thread类
* 1.创建一个继承于Thread类的子类
* 2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
* 3.创建Thread类的子类对象
* 4.通过此对象调用start()方法
* */
//1.创建一个继承于Thread类的子类
class MyThreadTest extends Thread {//2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
@Override
public void run() {//遍历一百以内的所有偶数
for (int i = 0;
i < 100;
i++) {if (i % 2 == 0) {System.out.println(i);
}
}
}
}
public class MyThread {public static void main(String[] args) {// 3.创建Thread类的子类对象
MyThreadTest myThreadTest = new MyThreadTest();
//4.通过此对象调用start()方法,启动子线程
myThreadTest.start();
}
}
主线程继续,cpu随机切换执行父线程与子线程
package com.com.sun.test;
/**
* @author sun
* @date 2021/6/22 - 9:00
*/
/*
* 多线程的创建:方式一:继承Thread类
* 1.创建一个继承于Thread类的子类
* 2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
* 3.创建Thread类的子类对象
* 4.通过此对象调用start()方法
* */
//1.创建一个继承于Thread类的子类
class MyThreadTest1 extends Thread {//2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
@Override
public void run() {//遍历一百以内的所有偶数
for (int i = 0;
i < 100;
i++) {if (i % 2 == 0) {System.out.println(i);
}
}
}
}public class MyThread1 {public static void main(String[] args) {// 3.创建Thread类的子类对象
MyThreadTest myThreadTest = new MyThreadTest();
//4.通过此对象调用start()方法,启动当前线程,调用当前线程的run方法
myThreadTest.start();
//问题1:调用子线程只能通过start()方法,启动子线程,不可以直接调用run方法
//myThreadTest.run();
错误//问题二:不能多次调用start()方法,一个对象只能调用一次start()方法
//myThreadTest.start();
//myThreadTest.start();
错误
//正确做法:
// 需要多次调用子线程,需要多次创建对象
/* MyThreadTest myThreadTest1 = new MyThreadTest();
MyThreadTest myThreadTest2 = new MyThreadTest();
myThreadTest1.start();
myThreadTest2.start();
*///主线程继续,cpu随机切换执行父线程与子线程
for (int i=0;
i<100;
i++){if(i%2==0){System.out.println("main+++++++++++++"+i);
}
}
}
}
认识多线程中常用方法
- (1)void start():启动线程,并执行对象的run方法
- (2)run():线程在被调度时执行的操作
- (3)String getName():返回线程名称
- (4)viod setName(String name):设置该线程名称
- (5)static Thread currentThread():返回当前线程
- (6)static viod yield():线程让步
- 暂停当前线程,把执行机会让给优先级相同或者更高的线程
- 若没有优先级更高或者相同的线程,则忽略该方法
- (7)join()方法调用的线程将被阻塞,直到join()方法加入的线程完成为止
- (8)static viod sleep(long millis)指定时间毫秒
- 令当前活动线程在指定时间内放弃cpu控制,使得其他线程有机会被执行,时间到后重新排队
- (9)boolean isAlive(),返回boolean,判断线程是否还活着
- (10)setPriority()设置线程优先级
package com.com.sun.test;
/**
* @author sun
* @date 2021/6/22 - 9:00
*/
/*
* 多线程的创建:方式一:继承Thread类
* 1.创建一个继承于Thread类的子类
* 2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
* 3.创建Thread类的子类对象
* 4.通过此对象调用start()方法
*
* 5.认识多线程中常用方法
* (1)void start():启动线程,并执行对象的run方法
* (2)run():线程在被调度时执行的操作
* (3)String getName():返回线程名称
* (4)viod setName(String name):设置该线程名称
* (5)static Thread currentThread():返回当前线程
* (6)static viod yield():线程让步
* 暂停当前线程,把执行机会让给优先级相同或者更高的线程
* 若没有优先级更高或者相同的线程,则忽略该方法
* (7)join()方法调用的线程将被阻塞,直到join()方法加入的线程完成为止
* (8)static viod sleep(long millis)指定时间毫秒
* 令当前活动线程在指定时间内放弃cpu控制,使得其他线程有机会被执行,时间到后重新排队
* (9)boolean isAlive(),返回boolean,判断线程是否还活着
* (10)setPriority()设置线程优先级
* */
//1.创建一个继承于Thread类的子类
class MyThreadTest2 extends Thread {//2.重写Thread类的run方法 -->将此线程执行的操作声明在run方法里面
@Override
public void run() {//遍历一百以内的所有偶数
for (int i = 0;
i < 100;
i++) {if (i % 2 == 0) {try {//static viod sleep(long millis)指定时间毫秒
//令当前活动线程在指定时间内放弃cpu控制,使得其他线程有机会被执行,时间到后重新排队
sleep(1000);
} catch (InterruptedException e) {e.printStackTrace();
}
//Thread.currentThread().getName()获取当前线程的名称
System.out.println(Thread.currentThread().getName()+":"+i);
}
//static viod yield():线程让步
if(i%20==0){yield();
}
}
}
}public class MyThread2 {public static void main(String[] args) {// 3.创建Thread类的子类对象
MyThreadTest2 myThreadTest = new MyThreadTest2();
//设置
myThreadTest.setPriority(Thread.MAX_PRIORITY);
//4.通过此对象调用start()方法,启动子线程
myThreadTest.start();
for (int i=0;
i<100;
i++){if(i%2==0){//Thread.currentThread().getName()获取当前线程的名称
System.out.println(Thread.currentThread().getName()+":"+i);
}}}
}
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- Linux下面如何查看tomcat已经使用多少线程
- 说得清,说不清