JAVA中的多线程的理解和运用(Thread类)

进程

讲到多线程,在这里我想说说进程。进程大家用过电脑的人都晓得,我们打开任务管理器,里面就有这各种各样的进程,在计算机上运行着。书面上来说:进程是一个正在执行中的程序,每一个进程执行都有一个执行的程序,该顺序是一个执行的路径,或者是一个控制单元。

线程

就是进程中的一个独立的控制单元,线程在控制着进程的执行。也就是说,每个进程之中,就比如说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多线程中的所谓的随机性。

猜你喜欢

转载自blog.csdn.net/quyuquan2014/article/details/82531474