您的位置:首页 > 编程语言 > Java开发

day--27 Java线程

2016-09-24 14:00 225 查看
线程

====================================

*进程 

  在操作系统中,并行执行的任务

*线程

在进程内部并行执行的任务

*线程作用:

*)将大任务,切分为多个并行的子任务

以提高执行效率

*)阻塞的代码要并行执行.

*java 创建线程的两种方式

继承Thread

实现Runable接口 创建对象 r包含一段可以被线程执行的代码

Thread t1=new Thread(r);

//线程执行后执行的r.run();

t1.start()

*线程调度器

负责时间片的分配.

*)线程间是竞争关系

*)线程状态 

new---->(Start())runable 可执行等待状态----->进入run(running)方法可以阻塞(block).---->run方法结束线程消亡(dead)

消亡后不能重新启动该线程.

线程调度方法

=============================

yeild() 当前线程让出cpu

sleep() 当前线程暂停

getPriority()

setPriority(int newPriority)

优先级,1-10,
默认5

优先级高,获胜机会越多.

反之亦然.

isDaemon()

setDaemon(boolean b)

守护线程,后台线程,精灵线程 *前台线程或虚拟机退出自动退出

b.join 使用另一个线程b的执行结果

interruput()打断一个线程的执行 InterruptedException

多线程共享数据

====================================

*一个线程正在修改数据,另一个线程同事访问数据.

synchronized

==================================

*同步

*一个线程执行到sychromized代码块时,必须得到一个同步锁,才能执行.

*非静态的同步方法

必须获得当前对象的锁

*静态的同步方法

获得*类对象*的锁(任何类只有一个锁)

*同步代块

synchromized(对象 ,)

{

同步代码块

}

获得指定的锁

1)this code可能被同时执行

2)类对象

3)正在访问的数据对象

*synchronized 保证多线程共享数据时数据安全

线程安全 

线程不安全
线程安全

StringBuilder
StringBuffer

ArrayList
Vector 

HashMap
HashTable
* synchronized
效率低

======================================================

*****生产者和消费者问题*******

*一种线程间的通信机制

*一个线程产生数据并放入集合另一个线程取数据

等待和通知

==================================================

Object 的方法

wait(),

当前线程在被调用的对象上等待(厨师在盘子上等待)

notify()

通知所有等待线程中的一个

notifyAll()

通知所有等待的线程

*)wait() 外面总是一个循环判断以防恶意线程敲盘子

*)等待通知方法外面必须有synchorized (测试代码在方法中没有,在调用处有.)

线程本地共享(绑定)

=====================================

*在当前线程上可以绑定一个数据,当执行到后面组件代码时,可以从当前线程获得数据

ThreadLocal

------------------------------------------------------------

Set(数据) 在当前线程绑定数据

get() 从当前线程获取数据

remove() 从当前线程移除数据

.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: