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() 从当前线程移除数据
.
====================================
*进程
在操作系统中,并行执行的任务
*线程
在进程内部并行执行的任务
*线程作用:
*)将大任务,切分为多个并行的子任务
以提高执行效率
*)阻塞的代码要并行执行.
*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() 从当前线程移除数据
.
相关文章推荐
- JAVA基础 day12 线程间通信 多线程一些常用方法
- 27、Java入门—多线程之线程的正确停止
- Java中的线程续
- Java线程控制的图像分割与合成
- java线程的缺陷 选择自 df_world 的 Blog
- Java 理论与实践:嗨,我的线程到哪里去了?
- Java开发中的线程安全选择与Swing[Z]
- java学习日记(线程)
- 如果我是国王:关于解决 Java 编程语言线程问题的建议
- 请教:在java中如何实现线程的函数互斥调用,用synchronized好像实现不了
- Java线程模型缺陷研究
- 驯服Java线程(二)
- Java线程及同步(synchronized)样例代码
- Java 101之线程基础
- 介绍JAVA的线程、线程类及Runnable (3)
- java线程的缺陷
- Java、C#线程模型分析对比
- Java线程及同步(synchronized)样例代码
- Java中的线程
- [例程] 挑战:中断Java线程 (zt zdnet.com)