首页 > 编程语言 > 详细

Java多线程

时间:2019-05-28 16:16:59      阅读:104      评论:0      收藏:0      [点我收藏+]

⒈优点

  1.提高应用程序的相应。对图形化界面更有意义,增强用户体验。  

  2.提高计算机系统Cpu的利用率。

  3.改善程序结构,将既长又复杂的进程分为多个线程独立运行,利于理解和修改。

⒉分类

  1.Java中的线程分为两类,一种是守护线程,一种是用户线程。

  2.几乎他们在每个方面都是相同的,唯一的区别是判断JVM何时离开。

  3.守护线程是用来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用户线程变成一个守护线程。

  4.Java中的垃圾回收就是一个典型的守护线程。

  5.若JVM中都是守护线程,当前JVM将退出。

⒊线程的生命周期

  1.新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。

  2.就绪:处于新建状态的线程被start()后,将进入线程队列等待cpu时间片,此时它已具备了运行的条件。

  3.运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态,run()方法定义了线程的操作和功能。

  4.阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出cpu并临时中止自己的执行,进入阻塞状态。

  5.死亡:线程完成了它的全部工作或线程被提前强制性的中止。

⒋实现

  1.继承Thread接口,并重写run()方法

 1 package cn.coreqi.thread;
 2 
 3 public class MyThread extends Thread {
 4     @Override
 5     public void run() {
 6         for(int i = 0; i< 100; i++){
 7             System.out.println("name:" + Thread.currentThread().getName() + "number:" + i);
 8         }
 9     }
10 }
1 public class Main {
2     public static void main(String[] args) {
3         Thread thread = new MyThread();
4         thread.start();
5     }
6 }

  2.实现Runnable接口,并重写run()方法

1 package cn.coreqi.thread;
2 
3 public class MyTask implements Runnable {
4     @Override
5     public void run() {
6         System.out.println("");
7     }
8 }
1 public class Main {
2     public static void main(String[] args) {
3         Thread thread = new Thread(new MyTask());
4         thread.start();
5     }
6 }

  对比继承和实现的方式,实现的方式要优于继承的方式

    1.避免了java中单继承的局限性。

    2.如果多个线程之间要同时操作同一份资源(或数据),更适合使用实现的方式。【仍然有线程安全问题】

⒌Thread常用方法及线程优先级

  1.start():启动线程并执行相应的run()方法
  2.run():子线程要执行的代码放入run()方法中
  3.yield():一旦执行一个线程的yield 方法, 那么这个线程将会释放cpu 的使用权
  4.join():在A线程中调用B线程的join()方法,表示,当执行到此方法,A线程停止执行,直到B线程执行完毕,A线程再接着join()之后的代码执行。
  5.isAlive():判断当前线程是否还存活。
  6.线程通信:wait() notify() notifyall()
  7.设置线程的优先级

  线程的优先级控制
    1·时间---先到先执行
    2.优先级 --- 高优先级的先执行
    默认: 同等优先级的按照时间(先到先执行),不同优先级的,高优先级的先执行,设置优先级只能保证抢先执行的概率变大了。
    MAX_PRIORITY(10); //最大优先级是10
    MIN_PRIORITY(1); //最小优先级是1
    NORM_PRIORITY(5); //默认优先级是5
  涉及的方法:
    getPriority():返回线程的优先级
    setPriotity():改变线程的优先级
  线程创建时默认继承父线程的优先级

 

 

Java多线程

原文:https://www.cnblogs.com/fanqisoft/p/10937962.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!