javase:线程基础

线程引入

进程与线程对比

1.进程:进程是系统进行资源分配和调度的一个独立单位。比如在一台电脑上能同时运行多个QQ
2.线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。比如一个QQ中的多个聊天窗口
3.线程与进程之间对比分析
①线程与进程之间的关系
在这里插入图片描述

4.进程和操作系统之间的关系
在这里插入图片描述

5.进程与线程之间的区别
①一个程序至少有一个进程,一个进程至少有一个线程
②线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高
③进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
④线程不能够独立执行,必须依存在进程中
Ps:可以将进程理解为工厂中的一条流水线,而其中的线程就是这个流水线上的工人

并发与并行

1.串行:所有任务都一一按照先后顺序进行;是一次只能取得一个任务,并执行这个任务
2.并行:指在同一时刻,有多条指令在多个处理器上同时执行,所以无论从微观还是从宏观来看,二者都是一起执行的
3.并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,如图所示:

在这里插入图片描述

异步和同步

1.同步:在发出一个功能调用时,在没有得到结果之前,该调用就不返回,也就是必须一件一件事做,等前一件做完了才能做下一件事
2.异步:当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者
线程创建方式
1.继承Tread类
2.实现Runnable接口

线程创建的步骤

继承Tread类步骤 ThreadDemo.java

①子类继承Thread
②重写run()方法,并且将线程的功能书写在run方法内部
③创建一个线程对象,并且调用start()启动线程
注意:start()是启动线程,run()是方法调用

package ThreadDemo;

public class ThreadAPIExample {

    public static void main(String[] args) {

        //1.创建线程
        Thread1 t1 = new Thread1("线程1");//设置线程名字 = t1.setName("线程1");

        //设置线程优先级
        t1.setPriority(Thread.MAX_PRIORITY);
        //获取线程优先级
        System.out.println(t1.getPriority());

        //2.启动线程
        t1.start();

        //3.获取当前线程名字
        //String str = Thread.currentThread().getName();
        //System.out.println(str);//main

        //4.获取线程编号  返回值long型
        long i = Thread.currentThread().getId();
        System.out.println(i);

    }

}

class Thread1 extends Thread{

    public Thread1(){
    }

    public Thread1(String name){
        super(name);
    }

    @Override
    public void run(){
        while(true){

            //中断线程  运行中---->可运行
            Thread.currentThread().interrupt();
            //测试当前线程是否中断
            boolean b1 = Thread.currentThread().isInterrupted();
            //判断线程是否处于活动
            boolean b = Thread.currentThread().isAlive();
            //System.out.println(b);//true
            //System.out.println(b1);//true
            //System.out.println(Thread1.currentThread().getName()+"----t1----");
        }
    }
}

实现Runnable接口 RunnableDemo.java

①实现Runnable接口
②实现run()方法
③A创建线程
B创建线程资源
C产生实现Runnable()接口对象
D将产生线程资源对象
E作为thread类的参数,来产生线程对象
④启动线程

package ThreadDemo;

public class RunnableDemo {

    public static void main(String[] args) {

        //1.创建一个T2对象
        T2 t2 = new T2();

        //2.创建一个Thread对象
        Thread th = new Thread(t2);

        //3.启动线程
        th.start();

        //运行两个死循环
        T2 t1 = new T2();
        Thread th1 = new Thread(t1);
        th1.start();

    }

}

class T2 implements Runnable{

    @Override
    public void run() {
        while(true){
            System.out.println(Thread.currentThread().getName()+"-------");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值