A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Demo extends Thread{
  2.         public void run(){
  3.                         for(int i=0;i<1000;i++){
  4.                                 System.out.println("Demo");
  5.                 }
  6.         }
  7. }

  8. public class XianCheng{
  9.         public static void main(String[] args){
  10.                 Demo d  =  new Demo();
  11.                 d.start();
  12.                
  13.                 for(int x=0;x<1000;x++){
  14.                         System.out.println("Hello World!"+x);
  15.                 }
  16.         }
  17. }
复制代码

3 个回复

倒序浏览
一个cpu一次只能执行一个线程,如果是多个核的话,可以同时执行多条线性
回复 使用道具 举报
1.Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行,然后通过此Thread类调用方法run()来完成其运行操作的.  start方法就是创建新的线程,并且调用run方法。
2.Thread类的run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。
3.线程的同时执行其实是我们的感觉,由于线程间的切换很快让我们觉得是很多线程在同时运行一样。
4.之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活.
回复 使用道具 举报
这样改下就行了,for循环里加了sleep:
  1. class Demo extends Thread{
  2.         public void run(){
  3.                         for(int i=0;i<1000;i++){
  4.                                         try {
  5.                                                                         Thread.sleep(50);
  6.                                                                 } catch (InterruptedException e) {
  7.                                                                         // TODO Auto-generated catch block
  8.                                                                         e.printStackTrace();
  9.                                                                 }
  10.                                 System.out.println("Demo");
  11.                 }
  12.         }
  13. }

  14. public class XianCheng{
  15.         public static void main(String[] args){
  16.                 Demo d  =  new Demo();
  17.                 d.start();
  18.                
  19.                 for(int x=0;x<1000;x++){
  20.                         try {
  21.                                                 Thread.sleep(50);
  22.                                         } catch (InterruptedException e) {
  23.                                                 // TODO Auto-generated catch block
  24.                                                 e.printStackTrace();
  25.                                         }
  26.                         System.out.println("Hello World!"+x);
  27.                 }
  28.         }
  29. }
复制代码
原因是如果机器不是多核的话,线程机制是靠为每个线程分配运行的时间块来实现的。简单的,比如每个线程每次分给50微秒的运行时间,所有线程轮流运行。
但其实线程有优先级的区别,如果有两个等待运行的线程优先级高的会被先分配时间块。
所以假设你的for循环在一个时间块里就运行完了的话,那就没有同时执行的效果,而在for里加一个sleep那代码肯定无法在一个时间块内运行完。
这样当分配某个线程的事件结束后这个线程就挂起,系统让另外一个线程运行,这样反复就有同时运行的效果了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马