您的位置:首页 > 编程语言 > Java开发

Java线程生命周期及其使用,sleep与interrupt的使用,wait与notify

2016-07-13 08:56 597 查看
工作内容:

1.回顾单例模式和简单工厂模型

2.学习Java多线程机制

学习分享:

线程:进程的一条执行路径

一、线程的生命周期:新建→(start)就绪→(获取资源执行run语句)运行状态→堵塞状态(sleep)→(run语句执行完)终止


二、线程实现方式:

1.继承Thread.      

2.实现Runnable接口【可以实现多线程的资源共享】

三、Thread.sleep(毫秒数)与Thread. Interrupt()的使用:

1.sleep方法需在线程start之后执行,该方法是使当前线程进入阻塞状态,持续时间是‘毫秒数’。

2.在使用sleep方法后,使用interrup方法可以使sleep执行catch部分语句(可以在catch语句中使用return语句来终止该线程)

3.Thread.yield()方法会使当前线程进入就绪状态,重新等待资源

4.object.wait()方法(属于Object)可以使object处于等待状态,这个object将一直不能变动【变动也是无效的变动】,直到object.notify/notifyAll来唤醒这个object之后才可队这个object做操作

5.线程优先级的设置:

a) 实现Runnable接口——在线程start()之前设置

b) 继承自Thread,可以在构造方法中使用this.setPriority(int权值)来设置

//测试实现Runnable的使用【实现资源共享】
public class RunnableDemo implements Runnable {
private int tickets = 50;

@Override
public void run() {
while (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "正在卖票,还剩" + (tickets--) + "张票");
}
}
}
//测试用例
public class Test {
public static void main(String[] args) {
RunnableDemo sale = new RunnableDemo();
Thread window1 = new Thread(sale, "一号");
Thread window2 = new Thread(sale, "二号");
Thread window3 = new Thread(sale, "三号");
window1.start();
window2.start();
window3.start();
}
}


执行结果:

共享票数

 

//测试sleep和interrup的使用
public class RunnableDemo implements Runnable {
private int tickets = 50;
@Override
public void run() {
while (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "正在卖票,还剩" + (tickets--) + "张票");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("抛出异常");
return;// 如果这里没有使用return,则程序继续执行
}
}
}
}


public class Test {
public static void main(String[] args) {
// MultiThreadingTest myMultiThreadingTest = new MultiThreadingTest();
// myMultiThreadingTest.start();
// for (int i = 0; i < 1000; i++) {
// System.out.println(Thread.currentThread().getName());
// }
RunnableDemo sale = new RunnableDemo();
Thread window1 = new Thread(sale, "一号");
// Thread window2 = new Thread(sale,"二号");
// Thread window3 = new Thread(sale,"三号");
window1.start();
// window2.start();
// window3.start();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
System.out.println("主线程暂停异常");
}
window1.interrupt();
System.out.println("执行结束");
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: