201711671233《Java程序设计》第12周学习总结

                201711671233《Java程序设计》第12周学习总结

一、教程学习内容总结

这周主要学习了线程,Thread类与线程的创建,线程常用方法,线程同步,协调同步的线程,线程联合,GUI线程,计时器线程。

 

(一)线程

进程是程序的一次动态执行过程,对应了从代码加载、执行至执行完毕的一次完整过程,这个过程也是进程本身从产生、发展至消亡的过程。

线程是比进程更小的执行单位。一个进程在执行过程中,可以产生多个线程,形成多条线索。

没有进程就没有线程。

 

(二)多线程

多线程是指一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况。但计算机在任何给定时刻只能执行那些线程中的一个。Java虚拟机快速地把控制从一个线程切换到另一个线程,给人一种几件事同时发生的感觉。

每个Java应用程序都有一个缺省的主线程。

 

(三)Thread类与线程的创建

用Thread子类或子类创建线程对象。Thread类的子类不能再扩展其他的类(Java不支持多继承)。

线程间可以共享相同的内存单元(包括数据和代码),可以利用共享单元来实现数据交换、实时通信与必要的同步操作。

 

(四)线程的常用方法

1、start()

调用start()方法启动线程,使之从新建状态进入就绪队列排队。

只有处于新建状态的线程才能调用start()方法,调用后开始排队等待CPU资源。

2、run()

Thread类的run()和Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作。

当run方法执行完毕后,线程就变成死亡状态。死亡状态就是线程释放了实体,即释放分配给线程对象的内存。

3、sleep(int millsecond)

线程的调度执行是按照其优先级的高低顺序执行的,当级别高的线程未死亡是,级别低线程没有机会获得CPU资源。

有时需要优先级高的线程让出CPU资源,使优先级第的线程有机会执行。此时,优先级高的线程可以可以在他的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间。休眠时间长短由sleep方法的参数决定,millsecond是以毫秒为单位的休眠时间。

4、isAlive()

线程处于新建状态时,线程调用isAlive()方法返回false。

当线程调用start()方法,并占有CPU资源后,该线程的run()方法就开始运行,在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true。进入死亡状态后(实体内存被释放),线程仍可以调用isAlive()方法,此时返回false。

 

(五)线程同步

线程同步就是若干个线程都需要使用一个synchronized(同步)修饰的方法,即线程中的若干个线程都需要使用一个方法,而这个方法用synchronized给予了修饰。多个线程调用synchronized方法必须遵守同步机制。

线程同步机制:当一个线程A使用synchronized方法时,其他线程想使用这个synchronized方法时就必须等待,直到线程A使用完该synchronized方法。

 

(六)协调同步的线程

wait()方法可以中断线程的执行,使本线程等待,暂时让出CPU的使用权,并允许其他线程使用这个同步方法。

其他线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有由于使用这个同步方法而处于等待的线程结束等待,曾终断的线程就会从刚才的中断处继续执行这个同步方法,并遵循“先中断先继续”的原则。

如果使用notify()方法,那么只是通知处于等待中的线程的某一个结束等待。

wait()、notifyAll()和notify()方法都是Object类中的final方法,被所有的类继承且不允许重写的方法。不可以在非同步方法中使用wait()、notifyAll()和notify()方法!

 

(七)线程联合

一个线程A在占有CPU资源期间,可以让其他线程调用join()和本线程联合。如:B.join();  (A在运行期间联合了B)

如果线程A在占有CPU资源期间一旦联合了B线程,那么A线程将立刻中断执行,一直等到它联合的线程B执行完毕,A线程在重新排队等待CPU资源,以便恢复执行。如果A准备联合的B线程已经结束,那么B.join();不会产生任何效果。

 

(八)GUI线程

当Java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中两个重要线程:AWT-EventQuecue和AWT-Windows。

AWT-EventQuecue线程负责处理GUI事件。

AWT-Windows线程负责将窗体或组件绘制到桌面。

 

(九)计时器线程

当某些操作需要周期性地执行,就可以使用计时器。

Timer类的构造方法Timer(int a,Object b)创建一个计时器。参数a的单位是毫秒,参数b是计时器的监视器。

使用Timer类的方法start()启动计时器,即启动线程。

使用Timer类的方法stop()停止计时器,即挂起线程。使用restart()重新启动计时器,即恢复线程。

计时器的监视器必须是组件类(如JFrame、JButton等)的子类的实例,否则无法启动计时器。

 

二、学习进度条

 

代码行数

(新增/累计)

博客量

(新增/累计)

学习时间

(新增/累计)

目标

2500行

10篇

200小时

第一周

30

1

10

第二周

30/60

1/2

10/20

第三周

30/90

1/3

10/30

第四周

30/120

1/4

10/40

第五周

30/150

1/5

10/50

第六周

30/180

1/6

10/60

第七周

50/230

1/7

10/70

第八周

100/330

1/8

10/80

第九周

100/430

1/9

10/90

第十周

200/630

1/10

10/100

第十一周

270/900

1/11

10/110

第十二周

300/1200

1/12

10/120

 

、参考资料

Java2实用教程(第5版)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值