Day21——知识点总结

1. 多线程

1.1 创建自定义线程类的方式

方式一:
	自定义线程类,继承Thread类,重写run方法
	创建自定义线程对象,直接调用start方法,开启线程
	
方式二:
	自定义线程类,遵从Runnable接口
	使用自定义遵从接口Runnable实现类对象,作为Thread构造方法参数
	借助于Thread类对象和start方法,开启线程

1.2 Thread类方法

//构造方法 Constructor
//分配一个新的线程对象,无目标,无指定名字
	Thread();
//创建一个新的线程对象,并且在创建线程对象的过程中
//使用Runnable接口的实现类对象作为执行的线程代码块目标
	Thread(Runnable target);
//创建一个新的线程,无指定目标,但是指定当前线程的名字是什么	
	Thread(String name);
//创建一个线程的线程对象,使用Runnable接口实现类对象,作为执行目标
//并且指定name作为线程名		
	Thread(Runnable target, String name);
//成员方法:
//以下两个是name属性setter和getter方法
	void setName(String name);
	String getName();
//设置线程的优先级,非一定执行要求,只是增加执行的概率	
//优先级数值范围 [1 - 10] 10最高 1最低 5默认
	void setPriority(int Priority);
//获取线程优先级
	int getPriority();
//启动线程对象		
	void start();
//当前方法是静态方法,通过Thread类调用,要求是当前所在线程代码块对应的线程
//进行休眠操作,休眠指定的毫秒数
	public static void sleep(int ms);
//当前方法是静态方法,通过Thread类调用,获取当前所处代码块对应的线程对象。		
	public static Thread currentThread();

2. 线程安全问题解决方式

2.1 同步代码块

synchronized (/* 锁对象 */) {
    
}

/*
特征:
 	1. synchronized 小括号里面的对象是锁对象,并且要求如果是多线程的情况下,锁对象必须是同一个对象。
 	2. synchronized 大括号中的代码块就是需要进行同步的代码,或者说是加锁的代码,大括号里面的内容,有且只允许一个线程进入。
 	3. 同步代码块越短越好,在保证安全的情况下,提高性能

2.2 同步方法

synchronized 作为关键字来修饰方法,修饰的方法就是对应的同步方
有且只允许一个线程进入,到底是谁来完成的加锁操作?

1. 静态成员方法
	锁对象,是当前类对应的字节码文件.class 类名.class
2. 非静态成员方法
	锁对象就是当前类对象 this

选择同步方法是否使用static修饰问题
	1. 如果非static修饰,要保证执行的线程对象有且只有一个,因为锁对象就是当前线程对
象
	
	2. 如果是static修饰,锁对象具有唯一性,多个线程使用的锁是同一个锁。

2.3 Lock锁

Java提供了一个对于线程安全问题,加锁操作相对于同步代码块和同步方法更加广泛的一种操作方式。
1. 对象化操作。
	创建Lock构造方法
		Lock lock = new ReentrantLock();
2. 方法化操作。
	开锁:
		unlock();
	加锁:
		lock();

3. 守护线程

守护线程,也称之为后台线程,如果当前主线程GG思密达,守护线程也就GG思密达。

守护线程一般用于:
	1. 自动下载
	2. 操作日志
	3. 操作监控

方法是通过线程对象
	setDeamon(boolean flag);
		true为守护线程
		false缺省属性,正常线程
发布了11 篇原创文章 · 获赞 11 · 访问量 5852

猜你喜欢

转载自blog.csdn.net/qq_41424681/article/details/104614999