Java进程(Process)和线程(Thread)的学习

进程和线程

        进程和线程都是操作系统中用于执行任务的单位,它们之间的主要区别在于资源的分配和管理方式。

1.什么是进程和线程?

  • 进程

        进程(Process)是程序执行时的实例,它包含了程序代码、数据以及程序运行时所需的资源。每个进程都有自己独立的内存空间,可以同时执行多个进程,它们之间相互独立。

  • 线程

        线程(Thread)是进程中的一个执行单元,一个进程可以包含多个线程,这些线程共享该进程的资源,包括内存、文件和其他系统资源。与进程相比,线程更加轻量级,它们可以更快地创建、销毁和切换,同时也更容易实现并发操作。

       总的来说,进程是资源分配的最小单位,而线程是CPU调度的基本单位。进程间的切换开销比线程大,但进程可以更好地保护资源的独立性;线程间切换开销小,但需要更加谨慎地管理共享资源,以避免竞态条件和死锁等问题。

2.多线程和单线程

        单线程指在同一时间内,程序只能执行一个任务,而多线程指在同一时间内,程序可以同时执行多个任务。

        单线程和多线程还是很好理解的,我们程序猿还被戏称为单线程生物。一次只能做一件事情,如果同时做多件事情,容易不安,烦躁,出错。

        生活中有许多多线程的例子,一心两用也能说是多线程,但要是两件事都搞砸,那可真是"重大BUG”。我平时挺多一心两用的,边打游戏边刷视频,边学习边听歌。我们接下来主要认识多线程。

3.为什么使用多线程

        给大家举个简单的例子,我以前去了**凉皮店打工,那里不是各司其职,会努力压榨你,前几天把收银,维护电脑,送餐,收拾卫生,进货,验货都学完了,然后直接让我进后厨,后厨学完后,我就开始了多线程,下面点过餐,我做,然后送,客人吃完收拾。接下来这个肯定能让大家了解到多线程的好处

        快到过年的时候,有一天只剩我和另外一个同事,她收银,我出餐,然后她中午回家了。那天下午一个饭店就我一个人。因为后厨是在二楼,收银点餐一楼,一楼还是便利店,我就开启了多线程超载模式。当然,我和程序不一样,是人不是机器,累趴了。但一个人支撑了有一个店。为什么使用多线程大家应该很清楚了,

        多线程能够提高程序的效率、改善用户体验,提高系统资源利用率,支持并发处理等。

4.Java如何创建多线程

java中提供了三种实现多线程的方式:

第一种: 继承Thread类

第二种: 实现Runnable接口

第三种: 实现Callable接口

        4.1第一种继承Thread类

                继承Thread类是指在Java编程中,创建一个新类并让该类扩展Thread类,以便可以通过该新类创建并启动线程。以下是一个简单的示例:

public class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running...");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

                在这个例子中,我们创建了一个名为MyThread的类,它扩展了Thread类,并覆盖了Thread类中的run()方法。在run()方法中定义了线程的执行逻辑。在main方法中,我们实例化MyThread类的对象,并调用start()方法来启动线程。

        4.2第二种实现Runnable接口

                要实现Runnable接口,需要创建一个类并让它实现Runnable接口,然后实现run()方法。下面是一个简单的示例代码:

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("Hello, I am a thread running using the Runnable interface.");
    }

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

                在这个示例中,Runnable类实现了Runnable接口并实现了run()方法。在main()方法中,我们创建了MyRunnable的实例,并将它作为参数传递给Thread类的构造函数。然后通过调用start()方法启动线程。当线程开始执行时,run()方法中的代码将被执行。

        4.3第三种实现Callable接口

                要实现Callable接口,需要编写一个类并实现Callable接口的call()方法。call()方法可以带有泛型参数来指定返回值的类型。以下是一个实现Callable接口的示例代码:

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int result = 0;
        for (int i = 1; i <= 10; i++) {
            result += i;
        }
        return result;
    }

    public static void main(String[] args) {
        MyCallable myCallable = new MyCallable();
        
        try {
            Integer sum = myCallable.call();
            System.out.println("Sum from 1 to 10: " + sum);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

                在这个示例中,MyCallable类实现了Callable<Integer>接口,并覆盖了call()方法来计算1到10的和。在main()方法中,创建了MyCallable对象,并调用了call()方法来获取计算结果。

5.课时小结

1. 什么线程和进程?
2. 创建线程的方式?
3. Thread类中常用的方法。
4. Runable和Callable的区别?
    1.Callable有返回值,而且抛出异常。而Runnable无返回值和异常抛出
    2.Callable她是对Runnable的补充。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值