/** * 程序是静态的数据 进程是动态的程序 线程是进程中的一个连续的控制流 * 程序: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()); } }
时间: 2024-10-24 07:30:52