Java-线程

目录

◎基本名词解释

1.程序

2.进程

3.线程

◎创建线程

方式一

方式二

◎Thread类中的常用方法

◎线程状态


◎基本名词解释

1.程序:

            为解决某种问题,使用计算机语言编写的一系列指令的集合

             计算机中的程序,特指的是静态的,按装在硬盘上的代码集合

2.进程:
正在内存中运行的程序,是操作系统进行资源分配的最小单位

3.线程:
进程可以进一步细化为线程,是进程内一个最小的执行单元,是cpu进行任务调度的最小单位

举个栗子:

(1)运行中的qq就是一个进程,操作系统会为这个进程分配内存资源,一个聊天窗口就可以认为是一个线程,这个多聊天窗口同时被cpu运行,但这些聊天窗口集合属于进程(线程属于进程)

(2)main方法(主线程)从上到下按顺序执行,所以当接口被使用时,无法再次使用,主线程可以创建并启动其他的线程

早期没有线程,早期cpu执行的时候,是以进程为单位执行

进程单位很大的,当一个进程运行时,其他的的就不能执行,所以后来将进程中的多个任务,细化为线程,cpu执行单位也转化为更小的线程

 
进程和线程的关系:

1.一个进程中可以包含多个线程

2.一个线程只能隶属于一个进程

3.线程不能脱离进程存在

4.一个进程中至少有一个线程(主线程)java中的main方法就是用来启动主线程的

5.在主线程中创建并启动其他线程,所有的线程都共享进程内存资源

◎创建线程

需求:想在Java程序中有几个不相关的程序同时有机会执行

可以在Java中创建线程,把一些要执行的任务放在线程中执行,这样都拥有让cpu执行的权力

运行结果:

方式一:

自己定义的类继承(extend)Thread类

重写run()方法,在run()方法中来编写我们的任务代码

!切记不能直接取调用run()方法,就成了普通方法的调用,并不是启动线程!

创建自己定义的线程类对象,调用myThread.start();//启动线程,启动后不会立即执行,需要操作系统的调度

public class MyThread extends Thread{

    @Override

    public void run() {

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

            System.out.println("hahah"+i);

        }

    }

}

 

方式二:

创建一个任务实现Runnable接口,对run方法进行重写

new一个Thread(任务对象),调用线程对象的的start()方法

main方法是用来启动Java主线程的

public class MyTask implements Runnable{

    @Override

    public void run() {

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

            System.out.println("MyTask:"+i);

        }

    }

}
 
常用方式二的原因:

1.避免了单继承的局限性,因为Java是单继承过的,继承了Thread类,就不能继承其他类了

2.更适合多线程共享同一份资源的场景

 

◎Thread类中的常用方法

Thread表示线程,提供了很多的方法,来对线程进行控制

1.run();线程要执行的任务

2.start();启动Java线程

 3.构造方法:
new Thread (Runnable runnable);
new Thread (Runnable runnable,String name);

4.setName("oooo");//为线程设置名字

5.t.sePriority(int p)//设置线程优先级(1-10之间)默认是5

t.getPriority();//获取优先级

优先级较高的线程先执行的概率大

操作系统线程任务的调度算法:

先来先服务算法(FCFS)调度算法

短作优先(SJF)调度算法

优先级调度算法

时间片轮转调度算法

高级相应比优先调度算法

6.Thread.sleep(long miles);//让线程休眠指定时间

7.t2.join();//其他线程等待t2线程结束(死亡)

◎线程状态

线程从创建到销毁

期间经历5个状态:

新建:new Thread();处于新建状态,此状态还不能被执行

          调用start()启动线程,让线程进入到就绪状态

就绪:获得cpu的执行权后,线程进入到cpu执行

运行:运行中的线程可以被切换,回到就绪状态,也可能因为休眠等原因进入阻塞状态
 

阻塞:线程休眠时间到了 回到就绪状态,当线程中所有的任务执行完了,线程就自动销毁

死亡:

守护线程

也是线程中的一种,区别在于它的结束,如果一个线程是守护线程,那么,它会等其他线程的任务结束后自动终止,守护线程是为其他线程提供服务的,eg:jvm中的垃圾回收线程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值