线程部分方法、同步锁、单列模式

线程部分方法:

join();//等待该线程死亡
yield();表示该线程愿意产生一些当前使用的处理器
setPriority(1~10);优先级,默认的是5
Thread.currentThread()获得当前正在执行的线程对象
getName();获得名字
setName();修改名字
new Thread(任务,“名字”);
sleep(毫秒);睡眠

同步锁

多线程操作的时候可能会出现安全问题,因为当一个线程正在运算的过程中,另一个线程也参与了,这时就用到了同步锁。
同步锁: synchronized
synchronized(唯一 锁 共享对象){要锁的代码块}

private int count = 100;
while(count>0) {
	synchronized (Tick.class) {//this指的是当前对象,  共享对象
		if(count==0) {
			break;
		}
		try {
			Thread.sleep(100);
			} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+"在卖,剩余"+--count);
		}
	}

Lock锁

	private Lock lock;
	private int cont = 100;
	public Ticket(Lock lock) {
	this.lock = lock;
	}
	while(true) {
		lock.lock();
		try {
			if(cont==0) {
				break;
			}
			Thread.sleep(100);
	System.out.println(Thread.currentThread().getName()+"正在卖:"+(--cont)+"张票");
			} catch (InterruptedException e) {
			e.printStackTrace();
			}finally {
			lock.unlock();
		}
}

synchronized和Lock锁的区别 :
1、synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁
2、用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。
如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了
3、synchronized放弃锁只有两种情况:①线程执行完了同步代码块的内容②发生异常;而lock不同,它可以设定超时时间,也就是说他可以在获取锁时便设定超时时间,如果在你设定的时间内它还没有获取到锁,那么它会放弃获取锁然后响应放弃操作

单列模式

单列模式:为了保证类对象的唯一(只能创建一个实例)
1、对象的构建通过构造器执行来创建
2、不能在其他类中随意创建对象
3、对象的创建在本类中提供一个公共方法

单列集合的创建方式: 懒汉模式存在的问题及处理:多线程调用时容易出现创建多个对象,可以添加锁来处理

  • 懒汉模式
class SingLe{
	private static SingLe single;
	
	private SingLe() {}
	public static SingLe getSingLe(){
		
		if(single ==null) {
			//加锁解决了两个线程同时调用,有延迟创建两个对象的问题,
			//但是带来了资源消耗的问题, 在外可以加个判断语句如果是空才执行加锁程序
			synchronized (SingLe.class) {
				if(single ==null) {
					//Thread.sleep(100);
					single = new SingLe();
				}
			}
		}
		return single;
	}
}

饿汉式:
工作中常用的是饿汉式

class SingLe2{
	private static SingLe2 single = new SingLe2();
	private SingLe2() {}
	public static SingLe2 getInstance() {
		return single;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值