初学Java之理论篇_多线程

多线程的概念

1.程序是一段静态的代码,它是应用软件执行的蓝本。
2.每个独立执行的程序都可称之为一个进程,进程是程序的一次动态执行过程。对应了
从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至
消亡的过程。
3.每个进程都要占用一定的内存空间和系统资源,各个进程之间是互相独立的。
4.多进程可以提高CPU的使用率
5.在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象
被称作并发执行。
6.多线程就是指一个应用程序中有多条并发执行的线索,每条线索都被称作一个线程。
7.线程会交替执行,彼此间可以进行通信。
8.每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行,这些
执行单元可以看做程序执行的一条条线索,被称为线程。
9.一个线程是一个程序内部的一个顺序控制流,是程序的执行单元,执行路径。是程序
使用CPU的最基本单位。
10.单线程是指程序只有一条执行路径。多线程就是程序有多条执行路径。
11.线程的执行具有随机性。

JAVA中的线程机制

1.Java虚拟机快速地把控制从一个线程切换到另一个线程。这些线程将被轮流执行,使得
每个线程都有机会使用CPU资源。
2.每个Java应用程序都有一个缺省的主线程。
  JVM一直要等到Java应用程序中的所有线程都结束之后,才结束Java应用程序 。 
3.思考:JVM的启动是单线程的还是多线程的?
	多线程的。原因是垃圾回收线程也要先启动,否则很容易会出现内存溢出。现在的
	垃圾回收线程加上前面的主线程,最低启动了两个线程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public final String getName():获取线程的名称。
public final void setName(String name):设置线程的名称。
针对不是Thread类的子类中如何获取线程对象名称呢?
public static Thread currentThread():返回当前正在执行的线程对象,这样就可以
获取任意方法所在的线程名称。
Thread.currentThread().getName()
例题:

未共享:
在程序中创建了四个TicketWindow对象,就等于创建了四个售票程序,每个程序中都有100张票,每个线程在独立地处理各自的资源。
在这里插入图片描述
共享:只创建了一个TicketWindow对象,然后创建了四个线程,在每个线程上都去调用这个TicketWindow对象中的run()方法,这样就可以确保四个线程访问的是同一个tickets变量,共享100张车票。
在这里插入图片描述

线程的状态与生命周期

在这里插入图片描述

出现阻塞状态(Blocked)的原因,以及如何从阻塞状态转换为就绪状态:
1.当线程试图获取某个对象的同步锁时,如果该锁被其它线程所持有,则当前线程会
进入阻塞状态,如果想从阻塞状态进入就绪状态必须得获取到其它线程所持有的锁。
2.当线程调用了一个阻塞式的IO方法时,该线程就会进入阻塞状态,如果想进入就绪
状态就必须要等到这个阻塞的IO方法返回。
3.当线程调用了某个对象的wait()方法时,也会使线程进入阻塞状态,如果想进入
就绪状态就需要使用notify()方法唤醒该线程。
4.当线程调用了Thread的sleep(long millis)方法时,也会使线程进入阻塞状态,
在这种情况下,只需等到线程睡眠的时间到了以后,线程就会自动进入就绪状态。
5.当在一个线程中调用了另一个线程的join()方法时,会使当前线程进入阻塞状态,
在这种情况下,需要等到新加入的线程运行结束后才会结束阻塞状态,进入就绪状态。
6.线程休眠
public static void sleep(long millis)
线程礼让
public static void yield()
(1)线程让步可以通过yield()方法来实现,该方法可以让当前正在运行的线程暂停。
(2)yield()方法不会阻塞该线程,它只是将线程转换成就绪状态,让系统的调度器重新
调度一次。让多个线程的执行更和谐,但是不能靠它保证一人一次,即不能百分之百达
到让出效果。
(3)当某个线程调用yield()方法之后,只有与当前线程优先级相同或者更高的线程才能
获得执行的机会。
线程加入
public final void join()
后台线程
public final void setDaemon(boolean on)
中断线程
public final void stop()
public void interrupt()

特别注意:
仅供参考学习,转载请附上原文链接
分享学习心得,如有侵权,望联系本人处理
还在读大学的程序员,项目经验少,如有纰漏,感谢指正
需要源代码请联系本人
谢谢配合

如果这篇文章对您有帮助,小小的点个赞,算是给小学弟的鼓励吧!谢谢大佬!!/呱呱.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值