一 线程的状态
一般来说线程从创建到死亡,要经历一下几种状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting(等待)、waiting、消亡(dead)。
二 线程并发与并行
并发:是指两个或多个线程,在同一时间段内运行的程序。
并行:是指两个或多个线程,同时运行的程序。
三 线程构造方法
定义一个方法通过继承Runnable()接口,可以直接创建一个子线程,通过new Thread.start()方法调用传参调用。通过Thread.currentThread().getName()获取到线程的名称。注意线程名称有默认名字为Thread-0,线程名称不会重复,在获取下一个线程名字为Thread-1,在下一个Therad-2一次类推
package com.java.demo;
public class Demo {
public static void main(String[] args) {
//如何获取线程的名称
System.out.println(Thread.currentThread().getName());
/**
* MyRunnable的默认名称Therad-0;
*
*/
new Thread(new MyRunnable()).start();
new Thread(new MyRunnable()).start();
/**
* 还可以赋值给一个变量通过,变量进行调用
* */
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
//获取的当前线程的名称,get和set方法进行赋值和获取
System.out.println(Thread.currentThread().getName());
}
}
结果为:
main
Thread-1
Thread-2
Thread-0
四 线程安全定义
线程不安全:定义一个卖票的方法,多个线程同时执行一个方法,比如定义三个线程,这三个线程就会同时去抢着卖票,就会造成数据丢失。
线程安全:定义一个卖票的方法,多个线程执行,只让一个线程去卖票,其余线程锁住,或者排队去执行,每次只允许一个线程去操作执行,线程安全。
保证线程安全有以下几种方法,正是我们接下来要讲的线程锁。
五 线程锁与线程安全
线程死锁synchronized关键字,显示锁 Lock 子类ReentrantLock
1.synchronized关键字 为线程死锁
意味着同步执行,两个方法就会抢着执行,谁也争不过谁,就会导致方法卡住,程序停不了,因为,两个方法在打架,谁也赢不了,一直僵持着。
解决办法:让其中一线程等待wait();二线程执行,二线程执行完毕,等待wait();告诉一线程执行notifyAll();一线程执行。
2.通过 显示锁 Lock 子类ReentrantLock 进入方法之后
创建锁对象
private Lock l = new ReentrantLock();
通过调用 l.lock();方法标记
将锁放开 .unlock()方法
多个线程会排队执行,线程安全
总结
1.创建线程通过new Thread ,也可以继承Runnable()接口来,创建多线程
2.多线程同时运行,需考虑线程安全问题,非常重要。
3.线程安全,可通过锁来解决