程序、进程、线程的关系

简介:

创建一个Java线程常见的有两种方式:

1.继承Thread类
两种表示方法:
(1).外部类

import java.util.Date;


public class Test1 {
    public static void main(String[] args) {

        //启动新线程 来完成输出时间的操作

        Mytime mt=new Mytime();
        //启动新线程 Thread的start()
        mt.start();

        for (int i = 0; i < 100; i++) {

                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {

                    e.printStackTrace();
                }
            System.out.println("主线程::"+i);
        }

    }

}
//外部类的解决方案
class Mytime extends Thread{



    @Override
    public void run() {
        // 放入线程要执行的代码 这是一个非常耗时的操作  
        boolean flag=true;
        while(flag){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }

            Date d=new Date();
            System.out.println(d);
        }

    }
}

(2).匿名内部类

import java.util.Date;


public class Test2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //匿名内部类的解决方案
        Thread t=new Thread(){
            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }
            }



        };

        t.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
    }

    }

}


------------------------------------------------------

import java.util.Date;


public class Test3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //匿名内部类 方案  因为这时   子类名是没有的 直接对Thread的run方法进行了实现
        new Thread(){
            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }
            }



        }.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
        }

    }

}

2.实现Runnable接口
两种表示方法
(1).外部类

import java.util.Date;


public class Test4 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Mytime2 mt=new Mytime2();
        // 创建线程用Thread类 并指定这个线程要执行的任务是mt
        Thread t=new Thread(mt);
        t.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
    }

    }

}

//外部类  这表示一个线程可以执行的任务
 class Mytime2 implements Runnable{

    @Override
    public void run() {
        boolean flag=true;
        while(flag){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }

            Date d=new Date();
            System.out.println(d);
        }

    }




 }

(2).匿名内部类

import java.util.Date;


public class Test5 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 创建一个任务对象 匿名内部类 有对象的引用

        Runnable r=new Runnable(){
            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }

            }


        };

        Thread t=new Thread(r);
        t.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
        }

    }

}

----------------------------------------------------------------------------

import java.util.Date;


public class Test6 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        // 创建一个任务对象 匿名内部类
        new Thread(new Runnable(){

            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }


            }



        }).start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
        }

    }

}
目录
相关文章
|
12天前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
|
11天前
|
资源调度 算法 调度
深入浅出操作系统之进程与线程管理
【9月更文挑战第29天】在数字世界的庞大舞台上,操作系统扮演着不可或缺的角色,它如同一位精通多门艺术的导演,精心指挥着每一个进程和线程的演出。本文将通过浅显的语言,带你走进操作系统的内心世界,探索进程和线程的管理奥秘,让你对这位幕后英雄有更深的了解。
|
15天前
|
Java
直接拿来用:进程&进程池&线程&线程池
直接拿来用:进程&进程池&线程&线程池
|
16天前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
|
26天前
|
开发者 Python
深入浅出操作系统:进程与线程的奥秘
【8月更文挑战第46天】在数字世界的幕后,操作系统扮演着至关重要的角色。本文将揭开进程与线程这两个核心概念的神秘面纱,通过生动的比喻和实际代码示例,带领读者理解它们的定义、区别以及如何在编程中运用这些知识来优化软件的性能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技巧。
|
28天前
|
Python
惊!Python进程间通信IPC,让你的程序秒变社交达人,信息畅通无阻
【9月更文挑战第13天】在编程的世界中,进程间通信(IPC)如同一场精彩的社交舞会,每个进程通过优雅的IPC机制交换信息,协同工作。本文将带你探索Python中的IPC奥秘,了解它是如何让程序实现无缝信息交流的。IPC如同隐形桥梁,连接各进程,使其跨越边界自由沟通。Python提供了多种IPC机制,如管道、队列、共享内存及套接字,适用于不同场景。通过一个简单的队列示例,我们将展示如何使用`multiprocessing.Queue`实现进程间通信,使程序如同社交达人般高效互动。掌握IPC,让你的程序在编程舞台上大放异彩。
18 3
|
11天前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
27 0
|
11天前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
19 0
|
15天前
|
存储 算法 Java
关于python3的一些理解(装饰器、垃圾回收、进程线程协程、全局解释器锁等)
该文章深入探讨了Python3中的多个重要概念,包括装饰器的工作原理、垃圾回收机制、进程与线程的区别及全局解释器锁(GIL)的影响等,并提供了详细的解释与示例代码。
16 0
|
19天前
|
并行计算 API 调度
探索Python中的并发编程:线程与进程的对比分析
【9月更文挑战第21天】本文深入探讨了Python中并发编程的核心概念,通过直观的代码示例和清晰的逻辑推理,引导读者理解线程与进程在解决并发问题时的不同应用场景。我们将从基础理论出发,逐步过渡到实际案例分析,旨在揭示Python并发模型的内在机制,并比较它们在执行效率、资源占用和适用场景方面的差异。文章不仅适合初学者构建并发编程的基础认识,同时也为有经验的开发者提供深度思考的视角。