Java进阶学习之初级(一)----多线程机制

Java进阶学习之初级(一)----多线程机制,第1张

Java进阶学习之初级(一)----多线程机制

在Java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用Java命令执行一个类的时候,实际上都会启动一个jvm,每一个jvm实际在就是在 *** 作系统中启动了一个进程

那么什么是线程,什么是进程?如何创建线程呢?


1.什么是线程、什么是进程

一般的定义:进程是指在 *** 作系统中正在运行的一个应用程序,线程是指进程内独立执行某个任务的一个单元。

怎么理解呢?

比如说QQ是是一个进程,如果你在和A朋友语音聊天的同时和B朋友打字聊天,同时还在QQ群下载图片,这三个 *** 作就相当于开启了三个线程,可以说有了线程之后我们设计的程序就可以一边执行A *** 作,一边执行B *** 作了。

线程和进程有什么区别呢?首先最直观的就是:一个进程可拥有多个线程。 具体比较:

*调度*

进程拥有资源; 线程是调度和分派的基本单位; 同一进程中线程的切换不会引起进程的切换; 进程间的线程切换则会引起进程切换从而导致资源切换等。

*并发性 *

进程和进程之间可并发执行 ; 线程:除了进程间的并发执行还可以线程之间并发执行; 线程的并发性更高。

*拥有资源 *

 线程并不能拥有资源,只有进程才拥有资源。

*系统开销 *

进程创建、切换和撤销都会导致系统为之创建或者回收进程控制卡以及资源,但是线程的创建以及线程间的切换并不会引起系统做这些事儿,所以线程的系统开销明显更小。

2.如何创建线程 1.继承Thread类;

我们可以使用继承Thread类的方式来创建一个线程。 创建一个类来继承Thread类,重写父类的run方法,就实现了创建我们自己的线程了。之后调用线程的start方法,就算是开启了一个线程了。

class MyThread extends Thread{
    private String name;
    public MyThread(String name) {
        super();
        this.name = name;
    }
    public void run() {
        System.out.println("线程" + name +"开始运行");
        for (int i = 0; i < 5; i++) {
            System.out.println("线程" +  name + "运行" + i);
        }
        System.out.println("线程" + name + "结束");
    }
}
public class Test {
    public static void main(String[] args) {
        Thread t = new MyThread("T!");
        t.start();
        Thread t2 = new MyThread("T2");
        t2.start();
    }
}

运行结果:

2.实现Runnable接口。

最简单创建线程的方法就是实现一个Runnable接口了,实际上所有的线程都是直接或者间接实现了Runnable接口的,上一个例子中Thread类其实就实现了Runnable接口。

class MyThread implements Runnable {
    private String name;
    private Thread mythread;
    public MyThread(String name) {
        super();
        this.name = name;
    }
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("线程" + name + "运行" + i);
        }
        System.out.println("线程" + name + "结束");
    }
    public void start() {
        System.out.println("线程开始: " + name);
        if (mythread == null) {
            mythread = new Thread(this, name);
            mythread.start();
        }
    }
}
public class Test {
    public static void main(String[] args) {
        MyThread t1 = new MyThread("T1");
        t1.start();
        MyThread t2 = new MyThread("T2");
        t2.start();
    }
}

运行结果:

3. 通过Callable 创建线程

4.通过Future 创建线程

总结:使用Callable创建线程和Runnable接口方式创建线程比较相似,不同的是,Callable接口提供了一个call () 方法作为线程执行体,而Runnable接口提供的是run ()方法,同时,call ()方法可以有返回值,而且需要用FutureTask类来包装Callable对象。

进程是指一种“自包容”的运行程序,有自己的地址空间;一般来说运行中的应用程序称为“进程”,进程中能够独立执行的控制流称为“线程”。线程是进程内部单一的一个顺序控制流 。

一个进程可以由多个线程组成,他们分别执行不同的任务。当进程的多个线程同时运行时,这种运行方式叫做“并发”。

基于线程的多任务处理环境中,线程是最小的处理单位。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存