多线程学习笔记

1、线程的优先级:每个线程都有自己的优先级,系统会根据优先级来决定那个线程先获取执行权,Thread类中包含的成员变量代表了线程的某些优先级,如Thread.MIN_PRIORITY(1),Thread.MAX_PRIORITY(10),Thread.NORM_PRIORITY(5,默认优先级),每个新线程都继承了父线程的优先级。优先级可以使用setPriority()方法设置。

2、某个线程使用join()方法加入到另外一个线程时,另一个线程会等待该线程执行完毕后再继续执行。

3、
死锁:常见情景之一:同步的嵌套。

class Ticket implements Runnable
{
private  int num = 100;
Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)
while(true)
{
synchronized(obj)
{
show();
}
}
else
while(true)
this.show();
}

public synchronized void show()
{
synchronized(obj)
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}

System.out.println(Thread.currentThread().getName()+".....sale...."+num--);
}
}
}
}

class DeadLockDemo 
{
public static void main(String[] args) 
{
Ticket t = new Ticket();
// System.out.println("t:"+t);


Thread t1 = new Thread(t);
Thread t2 = new Thread(t);


t1.start();
try{Thread.sleep(10);}catch(InterruptedException e){}
t.flag = false;
t2.start();
}
}

4、wait()方法释放锁,sleep()方法不释放锁。

5、interrupte()方法:接触线程冻结状态(wait sleep)使线程获取CPU执行资格,会抛出interrupted Exception异常。

6、setDaemon()方法:将线程标记为守护线程,当正在运行的线程都是守护线程时,JAVA虚拟机退出,该方法必须在启动线程前调用。

7、静态同步方法用的锁是类字节码文件对象.this.getClass()。

8、JDK1.5以后将同步和锁封装成了对象(Lock接口)。并将操作锁的隐式方式定义到了该对象中,将隐式动作变成了显式动作。

例:Lock lock=new ReetrantLock();

        lock.lock();

        code....

        lock.unlock();

一个lock对象可以有多个condition监视器,每个监视器有各自的一套await() singal() singalAll()方法,获取监视器:Condition con=lock.newCondition();

9、怎么控制线程的任务结束呢?
任务中都会有循环结构,只要控制住循环就可以结束任务。控制循环通常就用定义标记来完成。但是如果线程处于了冻结状态,无法读取标记。如何结束呢?
可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu的执行资格。 当时强制动作会发生了InterruptedException,记得要处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值