java笔记10 线程的概念

一、什么叫程序
所谓“程序”,是一个严格有序的指令集合。程序规定了完成某一任务时,计算机所需做的各种操作,以及这些操作的执行顺序。
二、单道程序设计环境中程序特点

  1. 单道程序设计环境是指: 计算机中除了操作系统之外,只存在一个用户程序,即用户程序独享整个计算机资源
  2. 单道程序有如下特点:
  • 资源的独占性:任何时候,位于内存中的程序可以使用系统中的一切资源,不可能有其他程序与之竞争。
  • 执行的顺序性:内存中每次只有一个程序,各个程序是按次序执行的,即做完一个,再做下一个。(绝对不可能出现在一个程序运行过程中,又夹杂进另一个程序执行的现象存在)
  • 结果的再现性:只要执行环境和初始条件相同,重复执行个程序,获得的结果总是一样的。

三、多道程序设计环境中程序特点

  1. 多道程序设计是指:计算机中除了操作系统之外,存在多个用户程序,这些程序同时运行。
  2. 多道程序设计有如下特点:
  • 间断性:由于资源共享和合作,并发程序间相互制约,造成合作执行间断。
  • 失去封闭性:程序执行受外界影知响。
  • 不可再现性:重复执行时,可能得到不同结果。

四、进程的由来
一方面为了保持程序 “是一个在时间上严格有序的指令集合,是静态的保存在存储介质上” 这个概念的原有含义,另一方面为了刻画多个程序共同运行时呈现出的这些特征,在操作系统中,以“程序”为基础,又引入了“进程”这一新的概念;
通俗点说,为了不破坏“程序”这个词原有的含义,而又能刻画多个程序共司运行时呈现出的新特征,所以引入了进程这一概念,按照大多数教材的说法:“ 为了使程序能并发执行,且为了对并发执行的程序加以描述,所以人们引入了进程 ”。

五、什么叫进程
程序是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态的实体;
进程是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态因完成任务而被撤消。

六、线程的定义

  1. 线程是一个程序里的不同执行路径;以前所编写的程序,每个程序都有一个入口、一个出口以及一个顺序执行的序列,在程序执行过程中的任何指定时刻,都只有一个单独的执行点。事实上,在单个程序内部是可以在同一时刻进行多种运算的,这就是所谓的多线程。
  2. 创建线程的方式(参考API)
    在这里插入图片描述
  3. 注意问题
    (1)Thread中start()方法的功能就是创建一个新的线程,并自动调用该线程的run()方法,直接调用run()方法是不会创建一个新的线程的;
    (2)执行一个线程实际就是执行该线程run方法中的代码;
    (3)执行完a.start();后并不表示a所对应的线程就一定会立即得到了执行,a.start();执行完后只是表示a线程具有了可以立即被CPU执行的资格,但由于想抢占CPU执行的线程很多,CPU并不一定会立即去执行a所对应的线程;
    (4)一个Thread对象能且只能代表一个线程一个Thread对象不能调用两次start()方法,否则会抛出java.lang.lllegalThreadStateException异常;
    (5)创建线程的两种方法
class T extends thread{
    public void run(){
            for (int i = 50; i >= 0; i--) {
                System.out.println("T-->"+i);
            }
    }
}
public class thread extends Thread{
    //继承线程,重写run方法。调用start方法,实现多线程
    @Override
    public void run() {
        //super.run();
        for (int i = 50; i >= 0; i--) {
            System.out.println("thread-->"+i);
        }
    }

    public static void main(String[] args) {
        thread a=new thread();
        T t=new T();
        t.start();
        a.start();
        //a.run();
        for (int i = 50; i >= 0; i--) {
            System.out.println("main-->"+i);
        }
    }
}

在这里插入图片描述

class T1 implements  Runnable{
    public void run(){
        for (int i = 50; i >= 0; i--) {
            System.out.println("T1-->"+i);
        }
    }
}
public class thread extends Thread{
    //继承线程,重写run方法。调用start方法,实现多线程
    @Override
    public void run() {
        //super.run();
        for (int i = 50; i >= 0; i--) {
            System.out.println("thread-->"+i);
        }
    }

    public static void main(String[] args) {
        //第一种创建线程的方法
//        thread a=new thread();
//        T t=new T();
//        t.start();
//        a.start();
        //a.run();
        for (int i = 50; i >= 0; i--) {
            System.out.println("main-->"+i);
        }
        //第二种创建线程的方法
        T1 t1=new T1(); //定义一个实现了Runnable接口的类T1,创建T1类对象t1,
        Thread a1=new Thread(t1);//用t1构造一个Thread对象a1
        a1.start();//调用a1中的start方法
        //t1.run();
    }
}

在这里插入图片描述

  • 总结:进程是一个应用程序,通俗点说也就是一个进程是一个软件;而线程是一个进程中的执行场景/执行单元,一个进程可以启动多个线程。(进程可以看作现实生活中的公司,而线程就是公司里的某个员工)

  • 例如:当在pos命令窗口输入:HelloWorld 回车之后,会先启动jvm,而jvm就是一个进程,jvm再启动一个主线程调用main方法,同时再启动一个垃圾回收线程负责看护,回收垃圾。最起码这个java程序中至少有两个线程并发,一个是垃圾回收线程,一个是执行main方法的主线程

  • 注意:
    1)进程A和进程B的内存独立不共享。(就比如说阿里巴巴和京东资源不会共享),
    网易游戏是一个进程
    酷狗音乐是一个进程
    这两个进程是独立的,不共享资源。
    2)那线程A和线程B呢?
    在java语言中:线程A和线程B,堆内存和方法区内存共享,但是栈内存独立,一个线程一个栈,假设启动10个线程,会有10个栈空间,每个栈和每个栈之间互不干扰,各自执行各自的,这就是多线程并发。
    在这里插入图片描述
    3)火车站,可以看做是一个进程;火车站中的每一个售票窗口可以看做是一个线程。A在窗口1购票,B可以在窗口2购票,A不需要等B,B也不需要等A,所以多线程并发可以提高效率。所以说java中之所以有多线程机制,目的就是为了提高程序的处理效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值