A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左岸那片海 中级黑马   /  2015-8-21 12:36  /  320 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程:
线程都有自己的默认名称 Thread-从0开始,通过this.getName()获得
currentThread():获取当前线程的对象
设置线程名称:通过setName()或者构造函数
**创建线程的第二种方法:
1.定义实现Runable接口
2.覆盖Runable接口中的run方法
3.通过Thread类建立线程对象
4.将Runable接口的子类对象传递给Thread类的构造函数
5.调用Thread类的start方法开启线程并调用Runable接口子类的run方法

实现方式和继承方式的区别:       

实现方式的好处:避免单继承的局限性。
在定义线程时,建议使用实现方式

继承Thread:线程代码存放在Thread子类run方法中
实现Runable:线程代码存放在接口的子类的run方法。

***线程安全问题用同步代码块
synchronized(对象)
{
   需要被同步的代码块
}

同步函数使用的锁是this
public synchronized void show(){ }

静态同步方法,使用的锁是该方法所在类的字节码文件对象。  类名.class

/*
wait();notify();notifyAll();
都是用在同步中,因为要对持有监视器(锁)的线程操作。
所以要使用在同步中,因为只有同步才具有锁。

等待和唤醒必须是同一个锁。

而锁可以是任意对象,所以可以被任意对象调用的方法定义Object类中

在多个输入者,多个输出者的情况下,必须使用while循环判断标记,并且唤醒全部notifyAll();
*/

*JDk1.5 中提供了多线程升级解决方案。
*将同步Synchronized替换成显式Lock操作
*将Object中的wait,notify,notifyAll,替换了Condition对象
*该对象可以通过Lock锁进行获取
*注释部分实现了本方法只唤醒对方操作

停止线程的方法,控制循环让run方法结束,线程也会结束

特殊情况:当线程处于冻结状态。就不会读取到标记,就不会结束。可以在异常里改变标记,让线程结束

Thread类提供该方法interrupt()强制唤醒线程

****守护线程******
线程.setDaemon(true)
跟随被守护的线程一起灭亡

**join()方法
当线程A执行到了B线程的.join()方法时,A就会等待。等B线程执行完,A才会执行

join可以用来临时加入线程执行
**可以设置优先级(1-10级)
**yield()减缓线程的执行


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马