java中线程初理解

来源:互联网 发布:大数据时代读后感3000 编辑:程序博客网 时间:2024/06/01 17:27

在java学习中,线程是属于那种知识点不多,但是不容易理解却又在实际开发中极为有效的一种手段。现在我们就来谈谈如何在java中使用线程。


1:什么是线程

在我们运行某一个程序时,加入该程序中存在不同的运行路径,那么就说该程序有着多线程。这里要区别于另外一个名词,“进程”。程序的多运行叫做进程,因而常常把进程同程序等同起来。比如说你打开浏览器,在浏览器中你打开了几个页面,这些个页面就成为不同的线程,是存在于打开浏览器这个进程里面的。

2:如何在java中启动一个线程

2.1:通过实现Runnable这个接口

在Runnable这个接口中,存在着一个唯一的抽象方法run(),因此在实现Runnable这个接口时,我们必须重写这个方法,把那些在线程中要执行的代码放入run方法中。但是,在调用该线程时,我们必须把实现Runnable的这个对象作为参数传递给类Thread的构造函数,从而启动新的线程。


2.2:通过继承类Thread

此外,我们还可以通过继承类Thread来开启新的线程。该类中已经实现了Runnable接口中run()方法,但其中没有任何的代码,因而我们在继承类Thread之后,还是要对run方法进行重写,把那些要执行的代码放在run方法中。但是在这里的,我们直接把继承Thread的类对象化之后,就可以直接启动线程了。


这就是开启线程的两种手段,值得注意的是,在启动线程的时候,我们并不是通过对象调用run方法,而是通过对象调用start方法进行开启线程。这是线程中值得注意的地方。


3:线程的优先级

当一个程序中,存在多个线程时,有时候我们想对某个线程设置更高的优先级。在java中,我们就是通过类Thread中的setPriority()方法来进行设置。


在上述代码中,我们启动了两个线程,并且把线程1的优先级程度在本来的基础上加上3。之前CPU在执行这两个线程时,是在他们俩之间进行随机切换,那么现在的话,CPU选择线程1的概率就是大于线程2.

4:线程的睡眠

在某些java程序中,我们需要当前的线程在某一段时间或者是在执行某一功能之后进行睡眠,以便于让其他线程来使用CPU。在java中我们是调用sleep()这个方法来实现线程的睡眠功能。


在线程睡眠中,往往会产生中断异常。这时候我们必须进行异常的处理。在这里我们是在类thread中重写run方法的,因此对于别的线程造成的中断异常,我们不能往上抛,因为我们不能确保你的上级有进行异常处理的功能。因此,我们在自己重写的run方法中处理异常。

4:线程的让步与阻塞

4.1:让步:在java中,往往在一个线程达到某种状态或者实现某种功能之后,就需要把占用的CPU资源让出去,以便其他的线程获取CPU。这时候就牵扯到线程的让步。在java中,我们是通过thread.yield()方法来实现这个功能。


在上述代码中,每当局部变量i的值是5的整数倍时,线程就把CPU让出去,从而开始重写与其他线程争夺CPU。

4.2:阻塞:阻塞的功能就是停止当前线程,使得调用join的线程执行完毕之后,在执行当前的线程。


在上述代码中,我们在main中调用了线程1,线程1调用join方法使得main中的for语句一直要等待线程1执行完毕才能执行。值得注意的是,当我们调用join方法时,也是会抛出中断异常的,因此我们必须进行处理,这里处理的方法可以是try...catch,也可以是往上级抛异常。





0 0
原创粉丝点击