关于java的进程与线程的关系

       我们学习了javase之后,还是会发现自己只学习了一些java的基础语法,并没有了解到一些更加高深的技术。现在让我们来更加深入的了解一下java吧!

        关于进程与线程之间的关系,我们首先要了解什么是进程?

        进程是在计算机操作系统用于管理和执行程序的基本单位。每个进程是一个正在运行的程序实例,拥有着独立的资源、内存空间、执行线程。

        线程就是一个更加轻量级的进程(之后还会有更加轻量的线程——协程)

        为什么我们会引入轻量级的进程呢?是因为

        1.我们需要应对高并发。

        2.避免进程的频繁创建与销毁。(因为进程的频繁的创建与销毁会消耗很多的cpu资源 导致性能下降)

        3.简化了程序的结构,使程序更具模块化和清晰性。

        那么我们如何去定义一个线程呢?首先我们需要先了解定义线程的类是什么?

        thread类,他是我们定义线程需要用的类,我们来看一下他的构造方法

我们现在创建线程用到的构造方法是无参数的构造方法。(关于之后的构造方法会在后面的文章讲到)

多线程的调度是随机的,我们不可干扰到线程的调度方式(原因:cpu内核中的调度器的实现方式是一种类似于随机调度的方式,会抢占式的执行)但是java给我们提供了一些列的api让我们可以明面上的是控制了线程的调度方式 例如:join、wait……

定义线程有五种方法

第一种创建线程的方法: 通过继承与thread类 来重写run方法。

class mythread extends Thread{
    @Override
    public void run() {
        while(true){
            System.out.println("我是mythread线程!");
        }

    }
}

public class thread1 {
    public static void main(String[] args) {
        Thread t = new mythread();

        t.start();

        while(true){
            System.out.println("我是main线程");
        }


    }
}

这个操作打破了我们以往对程序的认知 为什么一个代码可以执行两个while循环? 这就是我们要学习的多线程!

第二种方法创建线程的方法 : 继承与runnable接口 重写run方法。

class myrunnable implements Runnable{
    @Override
    public void run() {
        while(true){
            System.out.println("我是runnable线程!");
        }
    }
}
public class thread2 {
    public static void main(String[] args) {
        myrunnable r = new myrunnable();
        Thread t = new Thread(r);
        t.start();

        while(true){
            System.out.println("我是main线程!");
        }
    }
}

第三种创建线程的方法:创建thread对象使用匿名内部类 重写run方法。

(在这里给大家解释一下匿名内部类 匿名内部类的特征:1.没有名字 2.只能创建一次,不能复用3.可以实现接口或继承类 主要用于简化代码,不用显式的创建一个新的类文件 还能达到一定的封装效果。缺点:代码可读性差 所以创建线程我们一般不会使用匿名内部类 就引入了lambda表达式来创建我们的线程)

public class thread3 {
    public static void main(String[] args) {
        Thread t = new Thread(){
            @Override
            public void run() {
                while (true){
                    System.out.println("我是t线程!");
                }
            }
        };

        t.start();
        while (true){
            System.out.println("我是main线程!");
        }
    }
}

第四种创建线程的方法:创建runnable的对象 使用匿名内部类 重写run方法。

public class thread4 {
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println("我是t线程!");
                }
            }
        });
        t.start();
        while(true){
            System.out.println("我是main线程!");
        }
    }
}

第五种创建线程的方法:lamdba表达式。

public class thread5 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            while(true){
                System.out.println("我是t线程!");
            }
        });
        t.start();
        while (true){
            System.out.println("我是main线程!");
        }
    }
}

这就是五种创建线程的方法了。我推荐大家使用lambda表达式(匿名函数)来创建线程,因为代码结构简洁 清晰明了,减少了代码的冗余,提高了代码的可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值