多线程

多线程是比较抽象的,大概都可以写出一本书的内容,下面就是个人对多线程的理解与总结:

线程是进程执行运算的最小单位,可以完成一个独立的顺序控制流程,一个进程至少有一个线程

多线程的好处:可以充分的利用CPU的资源;简化编程模式;带来良好的用户体验。

多线程的缺点:每开辟一个子线程就消耗一定资源,会造成代码可读性变差,如果多个线程访问一个资源,会出现资源争夺的。

Java中多线程的实现方式

1.继承Thread类创建线程

线程继承了Thread类要重写Run()方法,run()是线程要执行操作任务的方法,线程要操作的代码都需要写在run()方法里,通过statr()方法启动线程后调用;


定义MyThread类继承Thread类

  1. public class MyThread extends Thread {  
  2.   public void run() {  
  3.   for(int i=1;i<100;i++){
  4.         System.out.println(Thread.currentThread().getName()+":"+i)
  5.   }  
  6. }  

线程的启动:

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

调用start()方法和run()方法的区别


图一只有主线程一条执行路径                                                 图二多条执行路径,主线程和子线程并行交替执行


2.实现Runnable接口创建线程

Thread类有一个缺点,如果定义的类继承了其他类的话,就不能再继承Thread类了,使用Runnable接口创建线程的方式可以解决上述的问题。

  定义MyRunnable实现Runnable接口:

  1.   public class MyRunnable implements Runnable{
  2.   public void run(){
  3.   for(int i=1;i<100;i++){
  4.     System.out.println(Thread.currentThread().getName()+":"+i);}}}

  创建线程对象

  1. public static void main(String[] args) {
  2. MyRunnable myRunnable  = new MyRunnable(); 
  3. Thread myThread = new Thread(myRunnable);  
  4. myThread.start();
  5. }


两种创建线程的方式有各自的特点和应用领域:

直接继承Thread类的方式,编写简单,可以直接操作线程,适合用于单继承的情况;

当线程继承了另一个类时,只能实现Runnable接口的方式创建,这种方式可以实现多个线程之间的资源共享。


线程的状态


创建状态:当使用new创建一个线程时,线程并没有开始运行

就绪状态:当线程对象调用start方法以后,线程并不一定开始执行,它必须和其他线程抢占CPU资源,在没有抢到资源之前,处于就绪状态

运行状态:当线程抢占到CPU资源以后,进入运行状态,开始执行run方法

阻塞状态:线程阻塞可能由多种原因引起。比如sleep方法,I/O线程阻塞,线程锁等

死亡状态:两种原因 1.run方法正常退出,线程自然死亡    2.发生异常,导致线程猝死)

线程常用的方法

1. setName():给线程设置名字    getName():获取线程的名字

2. currentThread():获取当前线程

3. isAlive():判断线程是否在执行

4. Join(): 可以通过join()方法使得某一个线程强制运行,此线程强制运行期间,其他线程无法运行,必须等待此线程完成之后,才可以继续运行。

5. Sleep():在指定时间内,让线程进入休眠,并且释放CPU资源

6. Interrupt(): 一个线程可以被另一个线程中断其操作的状态

7. getPriority():获取线程的优先级    setPriority():设置线程的优先级

8. Yield():线程礼让。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值