Thread

线程:创建、就绪、运行、阻塞、终止

 

线程中断结束:

不能使用interrupt()或stop()方法,可通过在线程实现类中,设置一个boolean类型开关控制

 

Thread类方法:

currentThread(): 当前线程对象

sleep(long milisec): 

yield(): 暂停当前执行的线程对象,并执行其他线程

 

Thread对象方法:

interrupt(): 中断线程。只是这种中断,是不安全的,会导致未来得及关闭的资源无法关闭

stop(): 结束线程,比interrupt()更暴力

join(): 将t线程合并到当前线程,等待t线程终止,再继续向下执行。相当于方法调用

setPriority(): 更改线程优先级

MIN_PRIORITY = 1

NORM_PRIORITY = 5

MAX_PRIORITY = 10

 

 

Object对象方法:

wait(): 导致当前线程等待,指导其他线程调用此对象的notify()或notifyAll()方法

notify(): 唤醒在此对象监视器上等待的单个线程

notifyAll(): 唤醒在此对象监视器上等待的所有线程

 

wait()和sleep()的区别:

相同点: 都是让当前线程进入等待状态

不同点: wait()后,锁不归我所有,必须等待被唤醒才能去抢锁

        sleep(),锁还是归我所有,一段时间后自动醒来

 

synchronized: 保证同一时间只能由一个线程访问同一资源

 

死锁:互斥、占有等待、非剥夺、循环等待

 

public class DeadLockTest implements Runnable {
	int flag = 1;
	static Object o1 = new Object();
	static Object o2 = new Object();

	public void run() {
		System.out.println(flag);
		if (flag == 1) {
			synchronized (o1) {
				try {
					Thread.sleep(1000);
					System.out.println("o1");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				synchronized (o2) {
					System.out.println("1");
				}
			}
		}

		if (flag == 0) {
			synchronized (o2) {
				try {
					Thread.sleep(1000);
					System.out.println("o2");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				synchronized (o1) {
					System.out.println("0");
				}
			}
		}
	}

	public static void main(String[] args) {
		DeadLockTest t1 = new DeadLockTest();
		DeadLockTest t2 = new DeadLockTest();

		t1.flag = 1;
		t2.flag = 0;

		new Thread(t1).start();
		new Thread(t2).start();
	}
}

 避免死锁:

1. 让所有线程按同样顺序获取一组锁,可消除a和b拥有者分别等待对方资源的问题

2. 将多个锁组成一组放到同一锁下面。

3. 将那些不会阻塞的资源用变量标识出来。

public class DeadLockResolved extends Thread {
	static Object o1;
	static Object o2;

	public void run() {
		synchronized (this) {
			try {
				Thread.sleep(1000);
				System.out.println("o1");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			System.out.println("o2");
		}
	}
	
	public static void main(String[] args) {
		DeadLockResolved d1 = new DeadLockResolved();
		DeadLockResolved d2 = new DeadLockResolved();
		
		d1.start();
		d2.start();
	}
}

 

你可能感兴趣的:(thread)