1.线程优先级
优先级最大值为10,最小值为1,默认为5,设置线程的优先级,不要超过它的取值范围,不然会抛出异常。
优先级高的线程,会优先得到 cup 的时间片的控制权。

RabbitThread rabbitThread = new RabbitThread(); 
 rabbitThread.start(); 
 rabbitThread.setPriority(Thread.MIN_PRIORITY);


垃圾回收器的线程的优先级非常低,所以即使调用了gc方法,也不一定能够得到立即执行。

2.join(连接、参加、加入)
如果在某个线程A中,启动了另外一个线程B,而且调用了B线程的join方法。那么A线程会等待B线程执行完毕后,才继续执行。

chengThread.start();//就绪 
 chengThread.join();

3.sleep(休眠)

Thread.sleep(long ms)


线程休眠,指定线程休眠的时间。参数是毫秒。
当前线程如果执行了sleep 方法,会进入阻塞状态。并出让出cpu的控制权。只有等到休眠的时间结束。然后进入就绪状态。等待cpu 的调度。

.sleep(time);
DateFormat sdf = new SimpleDateFormat(“HH:mm:ss”);


通过该方法,可以很好的控制一个线程的执行体,单次执行的时间周期。

4.yield(屈服)
Thread.yield()会让当前线程暂定,进入到就绪状态,让出cpu的控制权。让其他的线程执行。

5.守护线程
守护线程 后台线程必须在start(开始、启动)方法之前设置,前台的线程一旦终止,所有的守护线程都将被终止。

Thread1 thread1 = new Thread1(); 
 thread1.setDaemon(true);(设置守护线程) 
 thread1.start();

6.线程同步synchronized(同步)
synchronized(obj){}中的obj称为同步监视器
同步代码块中同步监视器可以是任何对象,但是推荐使用共享资源作为同步监视器
同步方法中无需指定同步监视器,因为同步方法的监视器是this,也就是该对象本身

同步监视器的执行过程
第一个线程访问,锁定同步监视器,执行其中代码
第二个线程访问,发现同步监视器被锁定,无法访问
第一个线程访问完毕,解锁同步监视器
第二个线程访问,发现同步监视器未锁,锁定并访问