进程
讲到多线程,在这里我想说说进程。进程大家用过电脑的人都晓得,我们打开任务管理器,里面就有这各种各样的进程,在计算机上运行着。书面上来说:进程是一个正在执行中的程序,每一个进程执行都有一个执行的程序,该顺序是一个执行的路径,或者是一个控制单元。
线程
就是进程中的一个独立的控制单元,线程在控制着进程的执行。也就是说,每个进程之中,就比如说QQ,我不止和一个人聊天,如果我和A,B,C同时在聊天,那么我对与A,B,C都是一条条线程。
JAVA VM 启动的时候会有一个进程java.exe 。该进程中至少一个线程负责java程序的执行,而且这个线程运行的代码存在于Main 方法。该线程就是主线程啦。
Thread类
该子类重写run方法
在应用程序主进程中新开一个线程,此线程进行死循环,每1秒被激活一次,激活时即在输出显示当前时间。
步骤:
1.定义类继承Thread
2.复写Thread 类中的run方法
3.请用线程的start 方法(该方法两个作用,自动线程,调用run方法)
程序:
import java.util.Date;
import java.text.SimpleDateFormat;//SimpleDateFormat是调整输出时间的格式
public class multline {
public static void main(String args[]){
Thread t=new Thread();//创建一个新的线程
Line d=new Line();
d.start();
}
}
class Line extends Thread{
public void run(){
while(true){
try{
Thread.sleep(1000);//死循环中的线程每隔一秒激活一次
SimpleDateFormat asd = null;//初始化当前的时间
asd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");//这里是SimpleDateFormat类的设置格式
System.out.println("当前时间:" + asd.format(new Date()));//原本是将设置一个变量容器将当前时间装入,但是现在可以直接输出
}
catch(InterruptedException e){
}
}
}
}
讲解
import java.util.Date;
import java.text.SimpleDateFormat;//SimpleDateFormat是调整输出时间的格式
public class multline {
public static void main(String args[]){
Thread t=new Thread();//创建一个新的线程
Line d=new Line();
d.start();
}
}
导入所需要的包,主函数中只有三步。
第一,创建一个新线程。
第二,创建一个类,这个类等下会去继承Thread 类然后进行自定义的编辑
第三,只有start 开始,我们之后所写的线程才会开始运行。
class Line extends Thread{
public void run(){
while(true){
try{
Thread.sleep(1000);//死循环中的线程每隔一秒激活一次
SimpleDateFormat asd = null;//初始化当前的时间
asd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");//这里是SimpleDateFormat类的设置格式
System.out.println("当前时间:" + asd.format(new Date()));//原本是将设置一个变量容器将当前时间装入,但是现在可以直接输出
}
catch(InterruptedException e){
}
}
}
}
首先,Line类是继承Thread 类的。并且,我们加入while (true)死循环
另外,在刚开始的时候,我未加入try catch 报错部分,保存后运行发现系统报错,我们在编写Thread.sleep 时就必须写上异常捕捉的机制部分。
而这里的Thread.sleep 我是借鉴了这里写链接内容的。
我认为,这个代码的思想很好。在我之前写的每一秒输出时间的代码之中这里写链接内容
我们是利用t.schedule(task, 1000,1000);//设置任务的执行,1秒后开始,每2秒执行一次 这个schedule 类进行定义如果控制输出时间的间隔的,这里我们又用到了sleep休眠,即系统休眠多长时间后又再次激活。这不恰好是时间的间隔作用。
而后面的输出和之前的链接上的输出无异。
这里,主要考察我们如何在主程序运行程序后,开启多线程,使多个线程在JAVA VM上进行运行。
总结
其实在之前看视频学习多线程的课上,我利用输出简单代码总结了一下多线程的含义。
如果我们主程序上输出并且在另外一个线程上也输出时
我们会发现,运行结果的每一次都不相同。因为,多个线程都获取CPU的执行权,CPU执行到谁,谁就运行。明确一点,在某个时刻,只能有一个程序运行(当然,多核除外)。CPU快速切换,实质上是线程。已达到看上去是同时的效果。我们可以把多线程的运行行为看在互相抢夺CPU的执行权。
这也就是JAVA多线程中的所谓的随机性。