阅读 168

线程、多线程、进程、线程生命周期、线程的五种状态、同步、线程间通信、创建线程的俩种方式

线程、多线程、进程、线程生命周期、线程的五种状态、同步、线程间通信、创建线程的俩种方式

进程概念:

进程是指可执行程序存放在计算机存储器的一个指令序列,它是一个动态执行的过程

线程:

线程是比进程还要小的运行单位,一个进程包含多个线程,线程是一个子程序


时间片轮转实现多任务同时进行


线程的创建:

1.创建一个Thread类,或者一个Thread子类的对象

2.创建一个实现Runnable接口的类的对象


Thread类

Thread是一个线程类,位于java.lang包下


Thread类的常用方法:




Runnable接口

1.只有一个方法run();

2.Runnable是Java中用以实现线程的接口

3.任何实现线程功能的类都必须实现该接口


一个java文件不能有多个文件


创建线程:


package com.my.thread;

class MyThread extends Thread{

  public void run(){

      System.out.println(getName()+"线程正在进行");

}

}

public class ThreadTest{

    public static void main(String[] args){


       MyThread my=new MyThread();

       //启动线程一个线程只能启动一次

       my.start();

}



}


}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

线程是随机获得cpu的使用权


实现Runnable接口是因为:

1.java不支持多继承,接口可以同时实现多个接口

2.不打算算重写Thread类的其他方法



package com.my.runnable;

class MyRunnable implements Runnable{

  @Override

  public void run(){

    System.out.println(Thread.currentThread().getName()+"正在运行");

 

}



}


public class ThreadTest{

    public static void main(String[] args){


      //多个线程可共享内存资源

      MyRunnable mr=new MyRunnable();

      Thread t=new Tread(mr);

        //MyRunnable mr1=new MyRunnable();

      Thread t1=new Tread(mr);

      t.start();

      t1.start();

      

}



}


}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

线程的五个状态:

新建(New)

可运行(Runnable)

正在运行(Running)

阻塞(Blocked)

终止(Dead)


线程的生命周期:




sleep方法应用:

Thread类的方法

public static void sleep(long millis)

作用:在指定的毫秒数内让正在执行的线程休眠(暂停执行)

通过 Thread.sleep(1000); 来调用


join方法应用

Thread类的方法:


public final void join()

作用:调用它会优先执行,等其执行完成后才会有其他线程执行操作是一种抢占资源的方式

线程对象.join();

2.public final void join()

作用:等待该线程终止的最长时间为millis毫秒。

1

2

有参数话,不管当前线程是否执行完,在时间到了之后其他线程就可以执行,无参数的话是只有该线程执行完后其他线程才可以执行。


线程优先级:

1.java为线程提供了10个优先级

优先级可以用整数1-10表示,超过范围会抛出异常。主线程默认优先级为5

2.优先级常量

-MAX_PRIORITY:线程的最高优先级10

-MIN_PRIORITY:线程的最低优先级1

-NORM_PRIORITY:线程的默认优先级5


线程优先级的相关方法:

public int getPriority() //获取线程优先级的方法

public void setPriority(int newPriority)//设置线程优先级的方法


线程优先级也不是绝对的,会和cpu、操作系统以及开启顺序也有关系


多线程运行问题:

1.各个线程是通过竞争cpu时间而获得运行机会

2.各线程什么时候得到cpu时间,占用多久,是不可预测的

3.线程被暂停是不确定的


同步:

synchronized关键字用在:

成员方法、静态方法、语句块



保证线程互斥(线程同步),使线程在执行的时候不被打断。保证完整性。


线程间通信:

wait()方法:中断方法的执行,使线程等待

notify():唤醒处于等待的某一个线程,使其结束等待

notifyAll()方法:唤醒所有处于等待的线程,是他们结束等待。


总结创建线程的两种方式:



使用实现Runnable接口创建线程较好,在Java中不支持多继承,实现接口也有利于数据共享

————————————————

版权声明:本文为CSDN博主「IT精神小伙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zhihu000/article/details/114753624


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐