黑马程序员_多线程_2

来源:互联网 发布:2015珠三角gdp数据 编辑:程序博客网 时间:2024/06/05 22:46

——- android培训、java培训、期待与您交流! ———-

计算机CPU的运行原理

     我们电脑上有很多的程序在同时进行,就好像cpu在同时处理这所以程序一样。但是,在一个时刻,单核的cpu只能运行一个程序。而我们看到的同时运行效果,只是cpu在多个进程间做着快速切换动作。      而cpu执行哪个程序,是毫无规律性的。这也是多线程的一个特性:随机性。哪个线程被cpu执行,或者说抢到了cpu的执行权,哪个线程就执行。而cpu不会只执行一个,当执行一个一会后,又会去执行另一个,或者说另一个抢走了cpu的执行权。至于究竟是怎么样执行的,只能由cpu决定

线程状态:

新建:start()

运行:具备执行资格,同时具备执行权;

冻结:sleep(time),wait()—notify()唤醒;线程释放了执行权,同时释放执行资格;

临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权;

消亡:stop()

————————————————————————————
sleep方法需要指定睡眠时间,单位是毫秒。

冻结与运行之间的状态:准备就绪。具备了执行资格,但是没有执行权。被创建:等待启动,调用start启动。

     运行状态:具有执行资格和执行权。     临时状态(阻塞):有执行资格,但是没有执行权。     冻结状态:遇到sleep(time)方法和wait()方法时,失去执行资格和执行权,sleep方法时间到或者调用notify()方法时,获得执行资格,变为临时状态。     消忙状态:stop()方法,或者run方法结束。

注:当已经从创建状态到了运行状态,再次调用start()方法时,就失去意义了,java运行时会提示线程状态异常
sleep方法需要指定睡眠时间,单位是毫秒。

冻结与运行之间的状态:准备就绪。具备了执行资格,但是没有执行权。被创建:等待启动,调用start启动。

     运行状态:具有执行资格和执行权。     临时状态(阻塞):有执行资格,但是没有执行权。     冻结状态:遇到sleep(time)方法和wait()方法时,失去执行资格和执行权,sleep方法时间到或者调用notify()方法时,获得执行资格,变为临时状态。     消忙状态:stop()方法,或者run方法结束。

注:当已经从创建状态到了运行状态,再次调用start()方法时,就失去意义了,java运行时会提示线程状态异常

t1.start();

    t2.start();      for(int x=0; x<60; x++){          System.out.println("main....."+x);      }  }  

}

线程的安全

导致安全问题的出现的原因:    1.多个线程访问出现延迟    2.线程随机性    线程安全问题在理想状态下,不容易出现,但是一旦出现对软件的影响是非常大的解决方法:同步(synchronized)    格式:    synchronized(对象){        需要同步的代码;    }

同步可以解决安全问题的根本原因就是在那个对象上,该对象如同锁的功能。

0 0