一,线程的属性

(1)、线程编号(ID):
  • 类型:long
  • 作用:用于标识不同的线程。不同的线程有不同的编号。
  • 只读
  • 注意事项:
    线程编号只在当前的运行中是唯一的,下一次运行,该线程的编号可能会发生变化。因此不适合作为唯一标识符。
  • 查看线程ID的方式:
package thread;

import java.util.Date;

public class SimpleJavaThread {
    public static void main(String[] args) throws InterruptedException {
        //以定义Thread子类的方式创建线程
        Thread ExtendThread = new ExtendThreadDemo();
        //以创建Runnable接口实例的方式创建线程
        Thread RunnableThread = new Thread(new CreateRunnable());
        //开始运行
        System.out.println("Main:"+Thread.currentThread().getId());
        System.out.println("ExtendThread:"+ExtendThread.getId());
        System.out.println("RunnableThread:"+RunnableThread.getId());
    }
}
(2)、名称(name)
  • 类型:String
  • 作用:用于区别不同的线程。默认值与线程的编号有关,默认格式为:Thread-线程号。main函数的线程名叫main。
  • 可以自己设置线程名
  • 注意事项:
    (1)、Java运行我们将线程名设置为一样。
    (2)、设置线程名可以方便我们调试代码和定位。
  • 代码:
package thread;

import java.util.Date;

public class SimpleJavaThread {
    public static void main(String[] args) throws InterruptedException {
        //以定义Thread子类的方式创建线程
        Thread ExtendThread = new ExtendThreadDemo();
        //以创建Runnable接口实例的方式创建线程
        Thread RunnableThread = new Thread(new CreateRunnable());
        //开始运行
        System.out.println("ExtendThread:"+ExtendThread.getName());
        System.out.println("RunnableThread:"+RunnableThread.getName());
        System.out.println("Main:"+Thread.currentThread().getName());
        ExtendThread.setName("线程名");
        RunnableThread.setName("线程名");
        Thread.currentThread().setName("设置线程名");
        System.out.println("ExtendThread:"+ExtendThread.getName());
        System.out.println("RunnableThread:"+RunnableThread.getName());
        System.out.println("Main:"+Thread.currentThread().getName());
    }
}

exec java 获取进程id java 获取当前线程id_线程属性

(3)、线程类别(Daemon)
  • 类型:Boolean
  • 可读可写
  • 值为true:守护线程,通常用于执行一些重要性不是很高的任务。否则为用户线程。
  • 默认值:与相应线程的父线程的该属性的值相同。
  • 注意:
    (1)、该属性的值必须在相应线程启动之前设置。即使用setDaemon方法应该在start方法之前。
    (2)、负责一些关键任务处理的线程不适宜设置为守护线程。
(4)、优先级(Priority)
  • 类型:int
  • 作用:给线程调度器的提示
  • 可读可写
  • 默认值:5,即普通优先级。Java提供了1~10的优先级。对于一个线程的优先级的默认值与其父线程的优先级相同。
  • 注意:
    (1)、一般线程的优先级为5。使用默认优先级即可
    (2)、设置优先级可能会导致出现线程饥饿问题。

二、Thread类的常用方法

  • static Thread currentThread() (1)作用:返回当前的线程对象
Object object = Thread.currentThread();
        System.out.println(((Thread) object).getName());
  • void run() 作用:实现线程所需要完成的任务处理逻辑。一般由java虚拟机自己调用,自己需要做的只是重写该方法,将需要处理的任务逻辑代码放入其中。
@Override
    public void run(){
        System.out.println("线程一:以定义Thread子类的方式创建线程" +Thread.currentThread().getName());
    }
  • void start() 作用:启动相应线程。
    注意:该方法的返回并不表示线程已经被启动,启动是由线程调度器进行的,一个Thread的实例只能执行一次start方法,多次调用会报错。
  • void join() 作用:等待相应线程的运行结束。
    如果A线程调用B线程的join方法,那么线程A的运行会被暂停,直到线程B运行结束。
    这个博客里面有挺详细的实例和讲解join方法。
    javascript:void(0)
  • static void yield 作用:暂停当前的线程
    注意:
    该方法的暂停效果不是绝对的,有的时候使用该方法的线程仍然可以被调用。
  • static void sleep(long millis) 作用:休眠millis毫秒。该方法的作用有点类似于C语言的sleep函数,当然C中的sleep是使整个程序暂停多久的时间,自己没有测试过暂停一个方法但是不影响其他方法的执行,因为C语言是面向过程的,从上到下一直执行下来,前面没执行完后面不会执行。但是C语言其实是可以实现多线程的。
    java中的Thread的sleep方法可以指定某个线程休眠,同时也可以使整个程序sleep休眠。