多线程


创建线程的两种方式:

    第一种是继承Thread类,它在执行过程中的内存结构图如下:


  第二种是实现Runnable接口:


推荐的线程终止方式如下:



线程的调度与控制: 

   Java虚拟机要负责线程的调度,去的CPU的使用权。

   目前有两种调度模式:分时调度模型、抢占式调度模型

   分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU 的时间片

   抢占式调度模型:优先级高的线程获取的CPU时间片相对多一些。如果线程的优先级相同,那么会随机选择一个


线程的优先级:

  优先级:1~10

  最低: 1

  最高: 10

  默认: 5


关于Thread类中的sleep方法:

   ① Thread.sleep(毫秒);

   ② sleep方法是一个静态方法;被调用时阻塞的是当前线程,不是调用该方法的那个线程引用阻塞。

   ③ 该方法的作用:阻塞当前线程,腾出CPU,让给其他线程

   注意:Thread中的run方法不抛出异常,所以重写run方法时,在run方法的声明位置上不能使用throws。所以run方法中的异常只能try...catch...

   


关于线程同步:

 


实现同步的两种方法:

  ① 使用同步语句块

   synchronized(共享对象){

需要同步的代码.....

                同步块中只能有一个线程执行

    }

  ② 同步方法

   synchronized关键字添加到成员方法上,线程拿走的也是this的对象锁

两种方式对比:第一种方式控制的比较精细,只需将需要同步的代码放到同步代码块中;第二种方法是将整个方法同步,效率可能会更低。


守护线程:当所有的用户线程(上面我们说到的都是用户线程)结束生命周期,守护线程才会结束生命周期,只有有一个用户线程存在,那么守护线程就不会结束。例如 Java中的垃圾回收器。

public class DeadLock {
	
	public static void main(String[] args) {
		Object o1 = new Object();
		Object o2 = new Object();
		//两个线程共享数据
		Thread t1 = new Thread(new Thread1(o1, o2));
		Thread t2 = new Thread(new Thread2(o1, o2));
		
		t1.start();
		t2.start();
	}
}

//线程1
class Thread1 implements Runnable{
	Object o1;
	Object o2;
	
	public Thread1(Object o1,Object o2) {
		// TODO Auto-generated constructor stub
		this.o1 = o1;
		this.o2 = o2;
	}
	
	public void run() {
		// TODO Auto-generated method stub
		synchronized (o1) {
			try {
				Thread.sleep(1000);//保证当次线程锁住o1时,第二个线程能锁住o2,从而发生死锁
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			synchronized (o2) {
				
			}
		}
	}
}

//线程2
class Thread2 implements Runnable{
	Object o1;
	Object o2;
	
	public Thread2(Object o1,Object o2) {
		// TODO Auto-generated constructor stub
		this.o1 = o1;
		this.o2 = o2;
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		synchronized (o2) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			synchronized (o1) {
				
			}
		}
	}
}


    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值