线程的命名和取得
##多线程的主要操作方法都在Thread类中定义。
##线程的运行状态是不确定的,那么在程序开发之中为了可以获取到一些需要使用到的线程,就只能依靠使用线程的名字来操作。在Thread中提共有线程名称的处理。
*构造方法
*设置名字set()
*取得名字get()
对于线程对象的获得不可能只是依靠一个this来完成,因为线程状态不可控,但是所有线程对象一定要执行run方法,那么这个时候可以考虑获取当前线程,在Thread类里面提供有获取当前线程的方法
public static Thread currentThread();
当开发者不设置名字的时候,则会自动生成一个不重复的名字。这种自动的属性命名主要依靠了static属性完成的,在Thread类里面定义有如下操作:
private static int threadInitNumber;
private static synchronized int nextThreadNum() {
return threadInitNumber++;
}
主方法也是一个线程。那么所有的线程都是在进程上的划分,那么进程在哪里?????
每当使用java命令执行程序的时候就表示启动了一个JVM的进程,一台电脑上可以同时启动若干个JVM进程,每一个JVM进程都会有各自的线程。
##在任何的开发之中,主线程可以创建若干个子线程。创建子线程的目的是可以将一些复杂逻辑或者比较耗时的逻辑交由子线程处理。主线程负责处理整体流程,而子线程负责处理耗时操作。
线程休眠
休眠的主要特点是可以自动实现线程的唤醒,以继续进行后续处理。注意,如果有多个线程对象,休眠也是有先后顺序的。
线程中断
线程的休眠是可以被打断的,这种打断肯定是被其他线程完成的。 在Thread类里提供有这种中断执行的处理方法:
*判断线程是否中断:public boolean isInterrupted();
*中断线程执行:public void interrupter();
所有正在执行的线程都是可以被中断的,中断线程必须进行异常处理。
线程的强制执行
所谓的线程的强制执行是当满足某些条件之后,某一线程对象将可以一直独占资源,一直到该线程的程序执行结束。可以利用Thread类里的方法,强制执行:public final void join() throws InterruptedException;
##在进行线程强制执行的时候一定要获取强制执行线程对象之后才可以执行join()调用。
线程礼让
线程的礼让是指先将资源让出去让别的资源先执行。可以使用Thread类中提供的方法:public static void yield();
礼让执行的时候每一次调用yield()方法都只会礼让一次当前的资源。
线程的优先级
从理论上讲线程的优先级越高越有可能(并不是绝对)先执行(先抢占到资源),在Thread里针对优先级的两个处理方法:
*设置优先级:public final setPriority(int newPriority)
*获得优先级:public final getPriority()
##在进行优先级定义的时候都是通过int型的数字来完成的,而对于此数字的选择在Thread类里定义有三个常量:
*最高优先级:public static final int MAX_PRIORITY 、10
*中等优先级:public static final int NORM_PRIORITY 、 5
*最低优先级:public static final int MIN_PRIORITY 、1
##主线程是属于中等优先级(5),默认创建的线程也是中等优先级(5)。