JAVA_SE复习(多线程)

线程

1.两种创建线程的方式都有自身的优点。

实现 Runnable 接口的优点:

从面向对象的设计观点看,Thread 类严格来讲是一个虚拟CPU 的封装,因此只有要改变或扩展该CPU 模型的行为时才应该继承这个类。

继承Thread 的优点是:代码会得到简化。

继承Thread 的缺点是:Java 只允许单继承,如果已经继承了Thread 类,则不能再继承其他类例如JFrame,这使得一些情况下不得不采用实现Runnable 的方法。

2.线程的优先级

默认情况下,线程的优先级是5 也就是Thread.NORM_PRIORITY。值得注意的是,即使当您为一个线程(线程A)指定最高优先级,另一个线程(线程B)指定最低优先级,运行程序的时候,线程A 也不是一定优先于线程B 执行的。线程的优先级只是表明在相同情况下,优先级高的线程有更大的几率抢占CPU

3. 线程的基本控制

A.sleep

a.sleep 方法使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有synchronized 同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常。

b.即使当一个线程设置为最高优先级,当它调用sleep 会终止一段时间,低优先级的线程反而有机会先执行:

4.多线程的两种使用方式:

A.使用Runnable

构建一个Runnerable接口的实现类,类中实现它的run方法

new一个thread对象  runnerable对象作为参数放入其中

最后,thread对象.star();

B. 使用thread

构建一个thread的继承类,类中实现它的run方法

然后,利用多态性:Thread t1 = new MyThread1();

最后,thread对象.star();【t1.star()

5. join 方法

执行join方法的线程必须全部都运行玩才能运行其他的线程。

join 方法使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程  执行完毕后再往下继续执行。注意该方法也要捕获异常。





原文地址:https://www.cnblogs.com/jarl/p/5892938.html