package com.shujia.day19;
/*
多线程:
进程:
正在运行的程序,是系统进行资源分配和调用的独立单位。
每一个进程都有它自己的内存空间和系统资源。
理解:一个正在运行的软件
线程:
是进程中的单个顺序控制流,是一条执行路径
一个进程如果只有一条执行路径,则称为单线程程序。
一个进程如果有多条执行路径,则称为多线程程序。
举例:阿里云盘(进程)中多个同时进行的任务,每一个任务可以看作一个线程
1、如何创建一个线程对象呢?
a. 自定义线程类继承Thread类,重写run方法
b. 自定义线程类实现Runnable接口,实现run方法
2、如何启动一个线程呢?
调用start()方法启动
Thread无参构造方法
Thread() 分配一个新的 Thread对象。
注意:
1、启动一个线程的时候,若直接调用run方法,仅仅是普通的对象调用方法,按照自上而下的顺序执行,底层不会额外的创建一个线程再执行
2、从执行的结果上来看,java线程之间是抢占式执行的,谁先抢到cpu执行权谁就先执行
3、每次运行的结果顺序不可预测的,完全随机的
4、每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。
Thread类中的成员方法:
1、public final String getName() 获取线程对象的名字,默认是通过调用Thread无参构造方法获取的名字,从0开始
2、设置线程对象名字的方式:
a. 通过父类的有参构造方法,在创建线程对象的时候设置名字
b. 线程对象调用setName(String name)方法,给线程对象设置名字
3、获取线程的等级
getPriority() 默认优先级都是5
4、设置线程优先级,setPriority(int i),在启动之前设置 [1,10]
注意不是优先级高的一定先执行,只是可能性变高了。
*/
class MyThread1 extends Thread {
MyThread1() {
}
//public Thread(String name)
MyThread1(String name) {
super(name);
}
// MyThread1(){
// //super()
// }
@Override
public void run() {
//将来线程启动后需要执行的逻辑
for (int i = 1; i <= 200; i++) {
System.out.println(this.getName() + " - Hello word " + i);
}
}
}
public class ThreadDemo1 {
public static void main(String[] args) {
//创建一个自己的线程对象
// MyThread1 t1 = new MyThread1("徐思远"); // Thread-0
MyThread1 t1 = new MyThread1();
t1.setName("徐思远");
t1.setPriority(1);
System.out.println("t1: "+t1.getPriority());
//创建一个自己的线程对象
// MyThread1 t2 = new MyThread1("魏一民"); // Thread-1
MyThread1 t2 = new MyThread1();
t2.setName("民哥");
t2.setPriority(10);
System.out.println("t2: "+t2.getPriority());
// t1.run();
// t2.run();
t1.start();
t2.start();
}
}
标签:多线程,优先级,Thread,概念,调用,线程,执行
From: https://www.cnblogs.com/qiwei-bigdata/p/18368026