【java基础】——线程
来源:互联网 发布:windows桌面程序开发 编辑:程序博客网 时间:2024/06/05 17:10
前言
在自考的《操作系统》中,我们也接触过线程这个东西,觉得它好难弄懂,当时要聚哥和王泽给我重复的讲才理解,现在到了软考里J2se视频里再次看到进程,觉得很熟悉。
概念
线程
线程是一个程序内部的顺序控制流。有没有觉得很官方,而且很难理解?而马老师则将得很简单,线程就是一个程序里不同的执行路径,在我们电脑里运行的是线程,所以说线程就是一条线。一个CPU只支持一个线程在运行,除非自己的电脑上装有两个cpu,也就是双核(现在才有些明白双核是什么概念了)。线程属于动态的概念。
线程有等待、就绪、运行、阻塞和终止6种状态,而这六种是互相转换的。
进程
进程是class文件或excel文件,属于静态的概念。
线程的创建和启动
线程可以通过继承Thread类重写run方法来实现。也可以通过接口实现。继承这个方法比较死板,继承之后就不能继承其它类,而接口方法还可以去调用实现其它方法,比较灵活,所以能用接口就不要用继承。
线程控制的基本方法
1、isAlive():判断线程是否还“活”着,即线程是否还未终止;
2、getPriority():获得线程的优先级数值。例如:在马路上闪着红灯发出它们特有声音的急求车、消防车、警车其他车都得为它们让道,它们可以直接过红灯。但是一般的汽车则不可以。
3、setPriority():设置线程的优先级数值。如急求车、警车、消防车相遇的时候,是谁让谁呢,这还得看看它们所被设置的优先级别谁的比较高了。
4、Thread.sleep():将当前线程睡眠指定毫秒数,它是可以调用Thread的静态方法,因此,sleep可以由类名直接调用。
public static void sleep(long millis) throws InterruptedExecption//使得当前线程休眠(暂时停止执行millis毫秒)
5、join方法:合并某个线程,如给自己电脑加个显示器,这个时候你在学习的时候,可以同时用两个显示器进行学习。
6、yeild方法:让出CPU,给其他线程执行的机会。就如马老师说的,上厕所排队,有个人实在憋不住了,而你还能再等等,所以你就把上厕所的机会给那个人了。
7、wait():当前线程进入对象的wait pool,这个方法类似于sleep方法。但是在线程加锁的情况下,用wait()方法后,锁就不属于自己了,而sleep()方法则还是抱着锁不放。
8、notify()和notifyAll():这两个都是唤醒对象的wait pool中等待线程的方法,notify()是唤醒wait pool中的一个等待线程,而notifyAll则是唤醒wait pool中所有的等待线程。
线程同步
线程同步就是连个线程同时进行,但是这种情况是不容许出现的,于是就产生了锁这个东西。如果我占用了一个线程,为防止其他人也来用这个线程,我就得在这个线程上加锁。在java中,用关键字synchronized来与对象对象互斥所联系,当某个对象Synchronized修饰是,表面该对象在任一是个只能有一个线程访问。就像一个人结了婚领了证一样,就不能和另外一个人结婚领证,不然他就犯了重婚罪。给线程加锁就容易出现死锁的情况,在操作系统中讲到这个问题可以用银行家算法来解决。例如你要向银行借款100万,但是人家只有80万,而另外一个人需要借60万,所以银行不会借给你,借给了需要60 万的那个人,等到银行拥有100万以上的金额时银行才有可能借给你。
总结
线程这一块学习觉得很有共鸣,听起来也觉得听容易接受,马老师也讲得挺有趣的。这一块的理解就先到这了,如果有什么理解不到位的,欢迎大家指出。
0 0
- Java基础—线程
- java基础—— 线程
- Java基础——线程
- java基础——线程
- 【java基础】——线程
- java基础学习—线程
- java基础—线程入门
- 【Java基础】——之线程同步
- Java基础——线程同步通信
- 黑马程序员——java基础:线程
- java基础——线程篇
- java线程基础——笔记
- java线程基础——笔记2
- JAVA基础——线程、String、StringBuffer
- Java基础——线程总结
- Java基础——线程(一)
- 黑马程序员——Java基础--线程
- Java基础——线程,锁机制
- TCP/IP详解-IP和IP选路
- Erlang可以挂掉的四种原因
- Android实战简易教程-第五十二枪(Fragment和Activity之间通信)
- 通信协议HTTP、TCP、UDP
- IOS隐式动画
- 【java基础】——线程
- ExpandListView使用自定义对象时异常
- 第8章 进程控制
- 系统可用性衡量指标MTTR|MTTF|MTBF
- JAVA基础学习(四)---数组的操作
- java设计模式-模版方法
- C++入门经典 笔记 (第十三章)高级引用和指针
- [LinkerScript.2] 链接器脚本格式 - Linker Script Format
- scala学习之:scala并发编程(三)