您的位置:首页 > 编程语言 > Java开发

熬之滴水穿石:JAVA的世界(9)

2013-06-04 06:37 323 查看
21--线程
在没用JAVA之前就搞过多线程编程很是繁琐,接触JAVA后发现在JAVA里写多线程是一件多么简单的事情。因为JAVA里内置了多线程的功能,所以创建线程就只需要像创建一个类那般的简单用new()方法就可以搞定。线程意味着你必须要有一个独立的执行空间,最为重要的一点是我们的线程任务,在独立的执行空间运行我们的任务代码。在JAVA里我们都是用继承Thread类来写线程的任务代码,该类有相应的管理线程的方法。在windows编程的章节里,我曾多次提到多线程的运行其实是跟处理器息息相关的。只有真正的多处理器还会让多线程真正的同时进行,很多时候都是靠时间片轮转来切换线程之间的任务的。
写JAVA的线程肯定是需要用到Runnable()接口,该接口其实就是一个Run方法。Runnable接口相当于线程要做的事情。这是一个非常容易理解的模式,首先创建Runnable对象,该对象的创建其实是对于线程执行任务的定义该方法是在线程执行空间执行的。当我们再建立Thread对象时,在new方法中把Runnable()对象传递给构造函数,相当于把run方法给了Thread对象实际上就是赋予了线程的方法。启动线程很简单用start方法即可!实际上Thread对象开始运行Runnable对象。
线程的生命周期可以分为建立,等待执行,执行,结束四个阶段。其实线程运行的过程并不是顺序进行的,它会在等待执行和执行之间反复的切换,因为这里涉及到了CPU调度的问题。当然JAVA线程的调度其实是由JVM来完成的。线程调度器其实并没有一个这样具体的实体类,但是作为程序员一定还是要知道线程调度的原理是什么。这又跟我之前说过的Windows编程联系起来了。线程调度器会把目前正在等待状态中的线程挑选出来运行,或者将正在运行的线程送回等待被执行状态。其实决定线程能够有机会执行最好的办法就是让他们周期性的sleep()一下。这样当他们休眠结束时便进入可执行状态去等待执行。当两个线程同时对一个对象进行存储操作时,就需要用到Synchrnoize关键词对方法作修饰。Synchrnoize的作用是将线程作同步化处理。其实每个对象都有一个默认的锁,这个锁只会在具备同步化方法时才会有效。当对象有一个或者多个方法时,线程只有在取得对象方法的钥匙才能进去同步化的方法。所以锁是对象锁而不是方法锁。同步化的目的其实就是为了保护重要的数据,而锁的作用不是针对数据而是针对存取数据的方法。
(未完待续..........)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: