试了下两个不同方法实现线程
主线程
package Thread;
public class Test {
public static void main(String[] args) {
Thread thread = new TreadClass();
Thread thread1 = new Thread(new TreadInterface());
thread.start();
thread1.start();
for(int i = 0 ;i<100;i++){
System.out.println("我是主线程");
}
}
}
继承Thread的线程
public class TreadClass extends Thread{
public void run(){
for(int i = 0 ;i<100;i++)
System.out.println("我是继承的线程");
}
}
实现接口的线程
public class TreadInterface implements Runnable{
@Override
public void run() {
for(int i = 0 ;i<100;i++)
System.out.println("我是实现接口的线程");
}
}
线程的属性
编号(ID):类型:long.用于标识不同的线程。每一个线程都拥有不同的编号 只读不难写
名称(Name):类型:String。用于区分不同的线程。通常是Thread-线程编号。读写
线程类别(Daemon):类型:boolean。值为true表示守护线程。否则表示用户线程。属性的默认值与相应的线程的父线程的该属性相同。读写
优先级(Priority):类型:int.本质是给线程调度器提示哪些线程应该优先。Java中定义了1-10的10个优先级,默认是5.
注意:ID可能销毁后容易被后续的线程继用所以不适合当作唯一编号。一般优先级默认即可。不恰当的可能导致严重的问题(可能会导致某些线程永远得不到运行)
守护线程和用户线程
这个大佬讲了很多 https://blog.csdn.net/lc1010078424/article/details/79613348
常用方法
static Thread currentThead() |
返回当前线程,即是当前代码的执行线程(对象) | 同一段代码的调用返回值可能是不同的对象 |
void run() | 用于实现线程的任务处理逻辑 | 该方法一般是Java虚拟机直接调用 |
void start() | 启动相应线程 | 该方法返回不代表线程已经启动了。一个Thread实例的start的方法只能够被调用一次,多次会异常 |
void join() | 等待相应的线程运行结果 | 若线程A调用线程B的join方法,那么线程A的运行会被暂停,直到B线程运行结束 |
static void yield() | 使当前线程主动放弃对处理器的占用,可能导致当前线程被暂停 | 这个方法是不可靠的,该方法被调用时当前的线程可能仍然被运行 |
static void sleep(long millis) | 使当前线程休眠(暂停运行)指定时间 |