JAVA-多线程-线程控制

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,也就是该对象本身

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

猜你喜欢

转载自blog.csdn.net/qq_37131111/article/details/79678170