在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;
多线程编程:
多任务分为多进程和多线程:
1、多进程:每一个程序(进程)在内存中各自一块独立的内存地址空间;
2、多线程:线程是包含在内存中的,每个进程可以分为多个线程,在内存中线程是共享内存地址空间的。
它们的区别:1、线程是进程内部的一个程序控制流;2、进程独享内存地址空间,线程共享
内存地址空间;3、线程的调用开销比进程小,相应的切换成本比进程低。
gc线程:垃圾回收器(守护线程)。
线程状态(生命周期):
1、新建;new出Thread对象
2、就绪;调用start方法
3、运行;运行run方法
中断:没有得到CPU的执行
(1)、没有抢占到CPU;线程优先级:1到10级,默认5级,10级最高setPriorty()可以设定线程的优先级,getPriorty()可以获得线程优先级
(2)、等待输入输出;阻塞,I/O事件
(3)、睡眠休眠;sleep()到点后醒来加入抢占CPU的执行,不是醒来后立即执行。
(4)、等待;wait()
(5)、挂起;yield()
4、死亡。run方法结束
线程的创建:
1、thread类:
(1)、编写一个继承Thread类的子类;
(2)、重写从父类继承的run方法;
(3)、创建Thread子类类的实例;
(4)、调用这个子类的start方法。(如果调用run方法则是普通调用,不会新建线程。)
2、Runnable接口:(这种更加符合面向对象)
(1)、创建一个类来实现Runnable接口;
(2)、在Runnable指定的run方法内放入想要在线程中执行的代码;
(3)、创建一个Runnable类的实例;
(4)、创建一个Thread对象,将Runnable类的实例作为构造参数传进去;
(5)、调用Thread类的start方法开始执行线程。
线程同步Synchronized关键字修饰符:
同步块:定义在调用者上,更灵活。
Synchronized(取得锁的对象){
要锁定的代码
}
同步方法:定义在资源上,更安全。
在方法名前加Synchronized关键字修饰符。
同步之后也许会产生死锁,产生死锁后的解决方案是:线程通讯。
线程之间的相互通讯:
wait()、notify()、notifyAll()用于线程间的通讯,只能写在同步方法或同步块中。
wait():让使用对象的线程停止运行;
notify():唤醒第一个等待的对象;
notifyAll():唤醒所有等待对象,让它们开始竞争CPU。
疯狂Java培训fkjava的课程采用针对性培养,全面提升学员就业能力,重点加强训练职业素质。老师辛勤的讲解,让学员充分感受Java的魅力,充分激发每个学员对于编程的热爱,让学员在半年的时间内掌握8-10万的代码量,成为真正的技术高手,疯狂Java采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!