1.Thread类中获取线程的两种方式
getName()
Thread.currentThread().getName()
2.创建多线程的第二种方式实现Runnable接口
a、创建RunnableImpl实现Runnable接口
b、重新run方法设置线程任务
c、Test中创建Thread传入RunnableImpl实现类对象
d、开启线程(Thread中的start方法)
3.使线程睡眠
Thread.sleep(睡眠的毫秒数);
4.Runnable和Thread的区别
a、Runnable解决了java中单继承的局限性
b、提高了程序的扩展性
5.匿名内部类创建线程
public class Test01 {
public static void main(String[] args) {
//Thread创建线程
new Thread() {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("Thread" + i);
}
}
}.start();
//Runnable创建线程
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("Runnable" + i);
}
}
}).start();
}
}
6.线程安全
a、几个线程同时访问同一个资源时,就会发生线程安全问题
b、采用同步技术来解决线程安全问题
方式一、同步代码块 : synchronized
注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他的线程只能在外等着
方式二、同步方法(实际和同步代码块类似)
方式三、Lock 锁
java.util.concurrent.locks.Lock 机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,
同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。
Lock锁也称同步锁,加锁与释放锁方法化了,如下:
public void lock() :加同步锁。
public void unlock() :释放同步锁。