标签:
/**
* 程序是静态的数据 进程是动态的程序 线程是进程中的一个连续的控制流
* 程序:Code+Data
* 进程:程序+CPU
* 线程:创建+就绪+运行+阻塞+销毁
*
* 2种生成线程类的方法
* 继承:java.lang.Thread+对象.start();
* 实现:java.lang.Runnable+借助Thread类对象.start();
* 2种方式都要重写run()
*
* 常用方法
* sleep(long time);
* 主动休眠 yield();
* 主动让出CPU join(); 立即进入执行状态
* getName();setName();isAlive();currentThread();
*
* 线程的优先级:1-10 默认5 10最高
*
* 线程的同步 多个线程访问(操作)同一个资源,即发生了并发现象 为了确保共享资源合理有序的利用,而创建了同步机制
* 实现同步:通过主要关键字synchronize和wait、notify等的配合
* wait():让当前线程对象进入等待状态
* notify():让当前线程对象发出一个唤醒信号,让等待者醒来
*
*/
class Student extends Thread {
private int score;
@Override
public synchronized void run() {
try {
System.out.println(this.getName() + "开始考试...");
Thread.sleep(3000);
System.out.println("考试结束,开始阅卷");
Thread.sleep(3000);
score = (int) (Math.random() * 101);
System.out.println("阅卷结束,现在可以查询成绩了");
this.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized int getScore() {
System.out.println(Thread.currentThread().getName() + "正在考试和阅卷,请稍等");
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return score;
}
}
public class ThreadTest {
public static void main(String[] args) {
Student student = new Student();
System.out.println("同学你考试能考多少分?");
System.out.println("给我点时间,我去考试,看看");
student.start();
System.out.println("查询学生考试成绩:" + student.getScore());
}
}
标签:
原文地址:http://www.cnblogs.com/qixiawentang/p/5483305.html