java线程的学习

线程的学习

使用线程


1.实现Runnable接口
2.继承Thread类


相同点
overwrite run方法,并且要public void

不同点

两种方法创建线程实例的时候
1.class t1 implements Runnable(){
.
.
.
}
2.class t2 extends Thread(){
.
.
.
}
Thread th1=new Thread(t1);
Thread th1=new t2();
th1.start();
th2.start();

Thread类的方法
.sleep(1000);//当前线程休眠1秒
..yield();//放弃此次cpu分配的时间片(我的理解是,"降低一次"当前线程优先级)

Thread 对象的方法
.start();//开启本线程
.run();//是start()的回调函数,会在start()时运行.

join()//获取th1线程的完成状况(等待th1执行完毕,使用此方法能更效率的管理各线程的运行顺序);


//多cpu的话,各线程会并发运行,所以有可能执行顺序被打乱.(没有环境,无法测试th1.join();,猜测是能够等待th1运行完毕,因为如果th2.start()需要th1的运行结果,在多cpu环境中,就可能抛异常)

join()方法例子
th1.start();
th1.join();
th2.start();
Thread.yieid();//因为当前线程的优先级大于子线程th2的优先级,所以syso会在th1执行后执行,调用
//当前线程的yieid()能够放弃此次cpu分配的执行机会,让th2.start()先执行
syso("当前线程正在执行..");

对线程的互斥控制,共享互斥(mutual exclusion)

//我的理解是,对与公共的资源,通过控制,一个线程使用开始时就吧这个资源加锁,这样其他线程就不能再访问此资源,这样有效的避免了两个售票员卖出2张同样的车票问题

调用synchornized(object o)
方法能够把o上锁,
(也可以在属性或方法,类上声明synchornized)

wart() notify/notifyAll

例子:
class synchornizd test(){
 if(x<100){
  wait([1000]);
}
}

wait的参数是等待时间

线程a,b来到test,
a获取了线程锁的钥匙,进入方法体
发现x<100.
执行wait()//进入休息室,并且吧线程锁钥匙扔出去
b又获得了线程锁钥匙,
进入test.同样x<100.也进入休息室
a,b在等待1秒后自动释放,或者等待其他线程调用notify[All]来释放休息室中的线程

注意:
if(x<100)
其实是不安全的,
因为如果a,b都在休息室,
c来了.把x改为了100,
a的休息时间完了,然后离开休息室,并且吧x改为了99,
b的休息时间也完了,他不进行判断就直接离开休息室,
采用while(x<100)
就不会发生这样的情况,
这样b想离开的时候,会再次比对一下条件,这样他就要继续在休息室呆着了.

 

在baidu文科上找的资料,看到这里突然没有了!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值