目录
一、创建多线程
java.lang.Thread类
创建多线程程序的第一种方式:创建Thread类的子类。
多线程原理随机性打印结果:
多线程原理多线程内存图解:
获取线程的名称: 1.String getName() 返回该线程的名称。 2.static Thread currentThread() 返回对当前正在执行的线程对象的引用。
设置线程的名称(了解): 1.void setName(String name):改变线程名称,使之与参数 name相同。 2.创建一个带参的构造方法,参数传递线程的名称;调用父类的带参构造方法,把线程名称传递给父类。
Thread类常用方法:
public static void sleep(long millis):是当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
创建多线程程序的第一种方式:实现Runnable接口
java.lang.Runnable接口:应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
java.lang.Thread类的构造方法: Thread(Runnable target):分配新的 Thread 对象。 Thread(Runnable target,String name):分配新的 Thread 对象。
实现Runnable接口创建多线程程序的好处: 1.避免了单继承的局限性。 2.增强了程序的扩展性,降低了程序的耦合性(解耦)。
二、线程安全问题
线程安全问题的概述:
线程安全问题产生的原理:
解决线程安全问题的第一种方案:使用同步代码块
格式:
synchronized(锁对象){
可能会出现线程安全问题的代码(访问了共享数据的代码)
}
注意: 1.通过代码块中的锁对象,可以使用任意的对象。 2.必须保证多个线程使用的锁对象是同一个。 3.锁对象作用:把同步代码块锁住,只让一个线程在同步代码块中执行。
同步技术的原理:
解决线程安全问题的第二种方案:使用同步方法
格式:
修饰符 synchronized 返回值类型 方法名(参数列表){
可能会出现线程安全问题的代码(访问了共享数据的代码)
}
解决线程安全问题的第三种方案:使用Lock锁
java.util.concurrent.locks.Lock接口
Lock接口中的方法:void lock():获取锁。 void unlock():释放锁。 java.util.concurrent.locks.ReentrantLock implements Lock接口