1.解释什么叫做程序,进程和线程?
指为完成特定任务用某种语言编写的一组指令的集合,指一段静态的代码
进程指程序的一次执行过程,或是正在运行的一段程序,程序是静态的进程是动态的,进程是资源分配的单位
线程,程序可进一步细化为线程是程序内部的一条执行路径
线程作为调度和执行的单位每个线程拥有独立的运行栈和程序计数器(pc)线程的切换开销小
方法一
1.问题一,是否能同调用run(),来开辟线程
2.问题二,通过反复调用.start(),是否能开辟多个线程,不能再次调用会报错
package day01;
/*创建一个Thread类的子类
重写Thread 类的run()方法//将此线程的操作声明在run之中
创建Thread类的子类
通过此对象调用start()的方法
*/
class MyThread extends Thread{
public void run() {
for(int i=1;i<=100;i++)
{
if(i%2==0){
System.out.println(i);
}
}
}
}
public class threadStudy01 {
public static void main(String args[]){
//创建子类的对象
MyThread thread= new MyThread();
//启动另一个线程,调用当前线程的run()方法
//不要写thread.run(),这还是主线程的思路
thread.start();
//输出这步仍然在主线程之中
System.out.println("hollow world");
}
}
运行结果的顺序看执行的速度
//可以采用匿名类
package day01;
/*创建一个Thread类的子类
重写Thread 类的run()方法//将此线程的操作声明在run之中
创建Thread类的子类
通过此对象调用start()的方法
*/
public class ThreadStudy01 {
public static void main(String args[]){
//使用匿名类实现三个线程同时进行
new Thread(){
@Override
public void run() {
for(int i=0;i<100;i++) {
if(i%2==0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}.start();
new Thread(){
@Override
public void run() {
for(int i=0;i<100;i++) {
if(i%2!=0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}.start();
System.out.println("hollow world");
}
}
package day01;
/*创建一个Thread类的子类
重写Thread 类的run()方法//将此线程的操作声明在run之中
创建Thread类的子类
通过此对象调用start()的方法
2.run();补充run()类型的不能抛异常只能捕获异常因为父类没有抛异常的语句,子类重载时也不能写
3.currentThread();静态方法
4.getName();获取当前线程的名字
5.setName();设置当前线程的名字
6.yield();释放cpu的执行权。
8.join();抢占cup的执行全,抛异常的命令
9.sleep(Long millitime);让当前线程millitime时间内不执行,处于阻塞状态;抛异常的命令
10.getPriority();
线程的优先级
1.MAX_PRIORITY:10//类中的静态常量Thread.MAX_PRIORITY
2.MIN_PRIORITY:1
3.NORM_PRIORITY:5
*/
public class ThreadStudy01 {
public static void main(String args[]){
//使用匿名类实现三个线程同时进行
new Thread(){
@Override
public void run() {
for(int i=0;i<100;i++) {
if(i%2==0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}.start();
new Thread(){
@Override
public void run() {
for(int i=0;i<100;i++) {
if(i%2!=0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}.start();
/*
线程的调度
1.抢占式:高优先级的线程抢占cpu
同优先级的符合先到先出的队列策略,对高优先级使用抢占式策略
线程优先级
*/
System.out.println("hollow world");
}
}