线程的六种状态
1.线程的六种状态
1.新建状态(new 线程对象)
2.运行状态(调用start)
3.受阻塞状态(等待cpu的执行资源)
4.休眠状态(调用了sleep(休眠时间)方法)
5.等待状态(调用了wait()方法)
6.死亡状态(run()方法执行完毕)
匿名内部类方式创建线程
2.匿名内部类创建线程(三种方式)
Thread t1 = new Thread(){
@Override
public void run(){
System.out.println("创建线程方式1");
}
};
t1.start();
Runnable runnable = new Runnable(){
public void run(){
System.out.println("创建线程方式2");
}
};
Thread t2 = new Thread(runnable);
t2.start();
Thread t3 = new Thread(new Runnable () {
@Override
public void run(){
System.out.println("创建线程方式3");
}
});
t3.start();
3.
Comparator<Student> comparator = new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2){
return o1.getAge - o2.get.Age();
}
};
TreeSet<Student> set = new TreeSet<>(comparator);
set.add(new Student("张三", 18));
set.add(new Student("李四", 15));
set.add(new Student("王五", 14));
set.add(new Student("赵六", 20));
for (Student student : set) {
System.out.println(student);
}
线程的休眠
4.
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 100; i++) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + "-" + i);
}
}
class SleepThread extends Thread{
@Override
public void run(){
for (int i = 0; i < 50; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-" + i);
}
对象锁(卖票问题)
5.
class Ticket implements Runnable{
private int tickets = 50;
private Object obj = new Object();
@Override
public void run(){
while(true){
synchronized(obj){
if(tickets > 0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "--" + tickets);
tickets--;
else{
break;
}
}
Thread.yield();
}
}
public static void main(String[] args) {
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
t1.start();
t2.start();
t3.start();
}
线程死锁
6.模拟线程死锁
class LockA {
private LockA() {
}
public static final LockA LOCK_A = new LockA();
}
class LockB{
private LockB() {
}
public static final LockB LOCK_B = new LockB();
}
class DieLock implements Runnable{
private boolean isTrue = true;
@Override
public void run() {
while (true) {
if (isTrue) {
synchronized (LockA.LOCK_A) {
System.out.println("if....LOCK_A");
synchronized (LockB.LOCK_B) {
System.out.println("if....LOCK_B");
}
}
}else {
synchronized (LockB.LOCK_B) {
System.out.println("else....LOCK_B");
synchronized (LockA.LOCK_A) {
System.out.println("else....LOCK_A");
}
}
}
isTrue = !isTrue;
}
}
}
public static void main(String[] args) {
DieLock dieLock = new DieLock();
Thread t1 = new Thread(dieLock);
Thread t2 = new Thread(dieLock);
t1.start();
t2.start();
}
Lock锁
7.Lock锁
class Tickets implements Runnable{
private int tickets = 50;
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (true) {
lock.lock();
try {
if (tickets > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + tickets);
tickets--;
}else {
break;
}
} finally {
lock.unlock();
}
}
}
}
Tickets tickets = new Tickets();
Thread t1 = new Thread(tickets);
Thread t2 = new Thread(tickets);
Thread t3 = new Thread(tickets);
t1.start();
t2.start();
t3.start();