1.交替执行还是一直占有cpu?
多个任务轮流获得cpu的使用权,比如让浏览器执行0.001秒,让QQ执行0.001秒,再让音乐播放器执行0.001秒
虽然实际上是轮流地(即某一个时刻只能有一个任务使用cpu)但是,由于一个任务失去cpu使用权之后只需等待很短地一段时间就又会再次获得cpu使用权,所以在外人看来,好像这个任务在一直拥有cpu的使用权
2.进程和线程
一个任务就是一个进程,浏览器就是一个进程,视频播放器是另一个进程,音乐播放器和Word也是进程
某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,同时还可以在后台进行打印,我们把子任务称为线程
个进程可以包含一个或多个线程,但至少会有一个线程
3.java程序启动实际上时启动了一个JVM进程,在这个JVM进程里先启动主线程main()方法,然后在main方法中,可以启动其他线程
4.创建一个线程
方式一:继承Thread类法
class MyThread extends Thread
{
@Override
public void run()
{
System.out.println("HelloWorld!");
}
}
public class demo
{
public static void main(String[] args)
{
//创建一个线程对象
Thread test=new MyThread();
//启动新线程
test.start();
//执行start()方法的时候会自动调用run()方法
//输出得到:HelloWorld!
}
}
方式二:实现Runnable接口法
class MyRunnable implements Runnable
{
@Override
public void run()
{
System.out.println("HelloWorld!");
}
}
public class demo
{
public static void main(String[] args)
{
//创建一个线程对象
Thread test=new Thread(new MyRunnable());
//启动新线程
test.start();
}
}
由于java中类必须单继承,所以如果用第一种方式创建线程,那这个类就无法再继承其他类了,因此方式二是一种更常用的创建方式
5.当存在两个线程:主线程和另一个我们自己创建的进程的时候,语句执行顺序问题
下面的程序总共有四条输出语句:我们分别给它们编号①②③④,这四条语句到底执行顺序是怎么样的呢?一定是①②③④吗?有没有可能是①④②③
class MyThread extends Thread
{
@Override
public void run()
{
//第二条语句:2
System.out.println("我们自己创建的线程开始运行");
//第三条语句:3
System.out.println("我们自己创建的线程结束运行");
}
}
public class demo
{
public static void main(String[] args)
{
//第一条语句:1
System.out.println("主线程开始运行");
Thread test=new MyThread();
test.start();
//第四条语句:4
System.out.println("主线程结束运行");
}
}
这份代码,先是启动了主线程,执行 System.out.println("主线程开始运行");
然后执行到test.start()这条语句的时候,启动了我们自己的线程(那么此时就是两个线程同时都在运行)
我们可以确定的是对于主线程而言:一定是先运行语句①,再运行语句④
对于我们自己创建的线程而言:一定是先运行语句②,再运行语句③
但是语句④到底是在语句②之前,还是在语句②和语句③之间,还是语句③之后无法确定,都有可能