线程多线程
1.两种建立线程的方式都有自身的优势。spa
实现 Runnable 接口的优势:线程
从面向对象的设计观点看,Thread 类严格来说是一个虚拟CPU 的封装,所以只有要改变或扩展该CPU 模型的行为时才应该继承这个类。设计
继承Thread 的缺点是:Java 只容许单继承,若是已经继承了Thread 类,则不能再继承其余类例如JFrame,这使得一些状况下不得不采用实现Runnable 的方法。对象
2.线程的优先级继承
默认状况下,线程的优先级是5 也就是Thread.NORM_PRIORITY。值得注意的是,即便当您为一个线程(线程A)指定最高优先级,另外一个线程(线程B)指定最低优先级,运行程序的时候,线程A 也不是必定优先于线程B 执行的。线程的优先级只是代表在相同状况下,优先级高的线程有更大的概率抢占CPU。接口
3. 线程的基本控制ci
A.sleep get
a.sleep 方法使当前线程(即调用该方法的线程)暂停执行一段时间,让其余线程有机会继续执行,但它并不释放对象锁。也就是若是有synchronized 同步块,其余线程仍然不一样访问共享数据。注意该方法要捕获异常。
b.即便当一个线程设置为最高优先级,当它调用sleep 会终止一段时间,低优先级的线程反而有机会先执行:
4.多线程的两种使用方式:
A.使用Runnable
构建一个Runnerable接口的实现类,类中实现它的run方法
再new一个thread对象 将runnerable对象做为参数放入其中
B. 使用thread
构建一个thread的继承类,类中实现它的run方法
而后,利用多态性:Thread t1 = new MyThread1();
最后,thread对象.star();【t1.star()】
5. join 方法
执行join方法的线程必须所有都运行玩才能运行其余的线程。
join 方法使调用该方法的线程在此以前执行完毕,也就是等待调用该方法的线程 执行完毕后再往下继续执行。注意该方法也要捕获异常。