黑马程序员_多线程
来源:互联网 发布:淘宝网一元秒杀在哪里 编辑:程序博客网 时间:2024/06/11 02:08
------- android培训、java培训、期待与您交流! ----------
获得一个线程有两种方式,继承Thread类或者实现Runnable接口,然后new Thread(实现Runnable接口的对象);
线程的启动是直接调用start()方法,不能直接调用run()方法,这样不会创建一个新的线程,只是简单的在当前线程中执
行了run()方法,然后结束当前线程。
多线程同步需要用到的关键字是synchronized;同步方法和同步块的共同的锁是 this;静态同步方法和同步块的共同的锁
是使用的锁是 类.class。线程间通讯,其实就是多个线程操作同一个对象。
线程中常用的方法:
thread1.join()的作用是把thread1所对应的线程合并到调用thread1.join()的线程中。join()也可以理解为抢占CPU的执行权,其他
线程碰到jonin()后将会等待,直到线程结束。
yield()方法可以让当前正在运行的线程对象临时暂停,让别的线程运行。
sleep(...)方法可以让当前正在运行的线程进入睡眠状态。
wait():释放资源,释放锁
sleep():释放资源,不释放锁
notify()往往幻想的是线程池中的第一个等待的线程
当出现多个生产者和消费者的时候,要用notifyAll()来唤醒等待的线程
线程中的死锁:
当两个或多个线程持有的锁不相同是就好发生死锁现象,例如:
class Test implements Runnable{
private boolean flag=false;
public Test(boolean flag){
this.flag=flag;
}
public void run(){
if(flag){
synchronized(MyLock.locka){
system.out.println("if locka");
synchronized(MyLock.lockb){
system.out.println("if lockb");
}
}
}else{
synchronized(MyLock.lockb){
system.out.println("else lockb");
synchronized(MyLock.locka){
system.out.println("else locka");
}
}
}
}
}class MyLock{
static Object locka=new Object();
static Object lockb=new Object();
}
public class Threadload {
/**
* @param args
*/
public static void main(String[] args) {
Thread t1=new Thread(new Test(true));
Thread t2=new Thread(new Test(false));
t1.start();
t2.start();
}}
因此我们在编写程序的时候应该避免使用这种现象,必须使用同一把锁才能保证线程之间的同步。
------- android培训、java培训、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima/
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 黑马程序员_多线程
- 2012-07-18-关于指针
- OracleEBS各模块中文名称及英文缩写
- EBS 各模块数据传送至总帐 需要运行的请求
- uva_10801 Lift hopping
- 常用的sql语句,整理自csdn论坛
- 黑马程序员_多线程
- 安卓市场
- 隐藏软件盘
- Java基础知识
- Dreamweaver CS5之旅(一)设置页面属性
- IOS 常用网站
- android fih-mms的实现
- android权限大全
- A Great HTML Parser-Html Agility Pack