【java基础】——线程
2015-09-04 20:51
477 查看
前言
在自考的《操作系统》中,我们也接触过线程这个东西,觉得它好难弄懂,当时要聚哥和王泽给我重复的讲才理解,现在到了软考里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万以上的金额时银行才有可能借给你。
总结
线程这一块学习觉得很有共鸣,听起来也觉得听容易接受,马老师也讲得挺有趣的。这一块的理解就先到这了,如果有什么理解不到位的,欢迎大家指出。相关文章推荐
- 老彭零基础教你学java
- java 初体验小结
- struts2入门(登陆实例)
- Spring常见问题汇总
- Java首课
- java下io文件切割合并功能加配置文件
- Spring减少MVC的代码冗余
- Java入门-泛型
- 利用lombok中的注解消除javabean代码冗余
- Spring MVC和Struts2的区别
- Struts2整合Spring
- java安全沙箱(二)之.class文件检验器
- Java transient关键字使用笔记
- org.springframework.dao.InvalidDataAccessApiUsageException: Name must not be null or empty!;
- javaSE基础编程——编写一个简单的计算器
- java分页类(程序处理分页,非数据库处理分页)
- jdk1.8 HashMap简介翻译
- java script
- 《Java核心技术卷二》笔记(一)流与文件
- javaSE基础编程——字节流