多线程|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); }}} }

    推荐阅读