门户网站建设考核总结网页游戏排行榜西游如何?
摘要:门户网站建设考核总结,网页游戏排行榜西游,网站变量,建筑类电商网站1.实现多线程 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程&#x
门户网站建设考核总结,网页游戏排行榜西游,网站变量,建筑类电商网站1.实现多线程 进程#xff1a;是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程#xff1a;是进程中的单个顺序控制流#xff0c;是一条执行路径 单线程#xff1a;一个进程如果只有一条执行路径#xff0c;则称为单线…1.实现多线程 进程是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程是进程中的单个顺序控制流是一条执行路径 单线程一个进程如果只有一条执行路径则称为单线程程序 举例记事本程序 多线程一个进程如果有多条执行路径则称为多线程程序 举例扫雷程序
多线程的实现方法
方法1继承Thread类 定义一个类MyThread继承Thread类 在MyThread类中重写run()方法 创建MyThread类的对象 启动线程
为什么要重写run()方法 因为run()是用来封装被线程执行的代码
run()方法和start()方法的区别 run()封装线程执行的代码直接调用相当于普通方法的调用 start()启动线程然后由JVM调用此线程的run()方法
package com.aynu14;
//方法1继承Thread类
// 定义一个类MyThread继承Thread类
// 在MyThread类中重写run()方法
// 创建MyThread类的对象
// 启动线程public class MyThreadDemo {public static void main(String[] args) {MyThread my1new MyThread();MyThread my2new MyThread();// my1.run();
// my2.run();//void start()导致此线程开始执行java虚拟机调用此线程的run方法my1.start();my2.start();}
}设置和获取线程名称
Thread类中设置和获取线程名称的方法 void setName(String name):将此线程的名称更改为等于参数name String getName():返回此线程的名称 通过构造方法也可以设置线程名称 如何获取main()方法所在的线程名称 public static Thread currentThread():返回对当前正在执行的线程对象的引用
package com.aynu14;//Thread类中设置和获取线程名称的方法
// void setName(String name):将此线程的名称更改为等于参数name
// String getName():返回此线程的名称public class MyThreadDemo {public static void main(String[] args) {
// MyThread my1new MyThread();
// MyThread my2new MyThread();
//my1.run();my2.run();
//
// // void setName(String name):将此线程的名称更改为等于参数name
// my1.setName(高铁);
// my2.setName(飞机);//Thread(String name)
// MyThread my1 new MyThread(高铁);
// MyThread my2 new MyThread(飞机);
//
// //void start()导致此线程开始执行java虚拟机调用此线程的run方法
// my1.start();
// my2.start();//static Thread currentThread()返回对当前正在执行的线程对象的引用System.out.println(Thread.currentThread().getName());}
}package com.aynu14;public class MyThread extends Thread{public MyThread(){}public MyThread(String name){super(name);}Overridepublic void run() {for (int i0;i100;i){System.out.println(getName():i);}}
}线程调度
线程有两种调度模型 分时调度模型所以线程轮流使用CPU的使用权平均分配每个线程占用CPU的时间片 抢占式调度模型优先让优先级高的线程使用CPU如果线程的优先级相同那么会随机选择一个优先级高的线程获取的CPU时间片相对多一些
java使用的是抢占式调度模型 例如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令线程只有得到CPU的时间片也就是使用权才可以执行指令。所以说多线程程序的执行是有随机性因此谁抢到CPU的使用权是不一定的 Thread类中设置和获取线程优先级的方法 public final int getPriority():返回此线程的优先级 public final void setPriority(int newPriority):更改此线程的优先级 线程默认优先级是5线程优先级范围是1~10 线程优先级高仅仅表示线程获取的CPU时间片的几率高但是要在次数比较多或者多次运行时候才能看到你想要的结果
package com.aynu14;//Thread类中设置和获取线程优先级的方法
// public final int getPriority():返回此线程的优先级
// public final void setPriority(int newPriority):更改此线程的优先级public class ThreadPriorityDemo {public static void main(String[] args) {ThreadPriority tp1new ThreadPriority();ThreadPriority tp2new ThreadPriority();ThreadPriority tp3new ThreadPriority();tp1.setName(高铁);tp2.setName(飞机);tp3.setName(汽车);// public final int getPriority():返回此线程的优先级System.out.println(tp1.getPriority()); //5System.out.println(tp2.getPriority()); //5System.out.println(tp3.getPriority()); //5// public final void setPriority(int newPriority):更改此线程的优先级
// tp1.setPriority(10000); //IllegalArgumentException
// System.out.println(Thread.MAX_PRIORITY);
// System.out.println(Thread.MIN_PRIORITY);
// System.out.println(Thread.NORM_PRIORITY);//设置正确的优先值tp1.setPriority(5);tp2.setPriority(10);tp3.setPriority(1);tp1.start();tp2.start();tp3.start();}
}线程控制
方法名说明static void sleep(long millis)使当前正在执行的线程停留暂停执行指定的毫秒数void join()等待这个线程死亡void setDaemon(boolean on)将此线程标记为守护线程当运行的线程都是守护线程时java虚拟机将退出
线程生命周期 多线程的实现方式
方式2实现Runnable接口 定义一个类MyRunnable实现Runnable接口 在MyRunnable类中重写run()方法 创建MyRunnable类的对象 创建Thread类的对象把MyRunnable对象作为构造方法的参数 启动线程 多线程的实现方案有两种 继承Thread类 实现Runnable接口
相比继承Thread类实现Runnable接口的好处 避免了java单继承的局限性 适合多个相同程序的代码去处理同一个资源的情况把线程和程序的代码、数据有效分离较好的体现了面向对象的设计思想
