最近写代码时 对与线程的概念有点模糊 便上网查了下有关线程的解释 使我对线程有了更多的理解 下面写的一点
东西是我对于线程的理解 也可以说是看了别人的文章后的一点启发 写这篇博客旨在和大家分享今天我之所得 写的
不对的地方希望能指点下
一.为什么需要线程:当程序代码必定会阻塞在一个位置的时候,为了使程序能继续运行而不受到阻塞的限制,便采
用一个线程来实现必定会阻塞的代码,这样阻塞的效果就只会影响到这个线程而不会影响到全部的程序,其实运行
的一个程序本身就是一个线程
比如说:在通信中服务器端建立服务器后,等待客户连接时就会造成阻塞。
public class MyWeb{
public static void main(String []args){
...
java.net.ServerSocket server=new ServerSocket(port);
java.net.Socket client=server.accept();//当程序运行到这时就会阻塞在这 直到有客户来连接
... //才会执行以下的代码
}
因此在这利用线程来处理,将以上的代码放在一个线程的run()方法里面执行 就不会影响到其他代码的执行了
public class MyWeb extends Thread{
public void run(){
java.net.ServerSocket server=new ServerSocket(port);
java.net.Socket client=server.accept();
}
public static void main(String []args){
...
MyWeb meb=new Myweb();
meb.start();//通过启动线程来执行可能会阻塞的代码 使其不影响到其他的代码;
...
}
程序可能不是很正确 希望能帮助理解
二.线程的几个常用方法:
1.sleep()使线程休眠一段时间后自动醒来;
如:
Thread.sleep(1000);//表示线程休眠1秒(sleep方法中单位设置的是毫秒)后再执行
2.wait()调用这个方法后 线程不能自己醒来 而要别的线程给执行notify()方法来唤醒
3.yield()方法:使得线程放弃当前分得的cpu时间,但是不使线程阻塞,即线程仍然处于可执行状态,并且随时
可能再获得cpu时间;
三. 线程的4个基本状态:(摘自http://www.360doc.com/UserHome/15822)
1 新状态:线程已被创建但尚未执行(start()尚未被调用)
2.可执行状态:线程可以执行,虽然不一定正在执行。cpu时间随时可能被分配给该线程,从而使得它执行。
3.死亡状态:正常情况下 run()返回使得线程死亡。调用stop()或destroy()亦有同样效果,但是不被推荐,前
者会产生异常,后者是强制终止,不会释放锁。
4.阻塞状态:线程不会被分配cpu时间,无法执行。