线程

来源:互联网 发布:淘宝装修店招全屏代码 编辑:程序博客网 时间:2024/05/29 08:16

了解进程对我们学习线程很有帮助

理解线程与进程的区别

进程:是指一个内存中运行中的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程​

线程:是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据。

多进程:操作系统中同时运行的多个程序

多线程:在同一个进程中同时运行的多个任务

主线程main

在运行一个简单的java程序的时候 就已经存在了两个线程,一个是主线程,一个是后台维护的垃圾回收线程

项目中如何创建并启动线程的两种方式

package cn.xiejian.MyThread;

public class MyThread extendsThread{   @Override   public void run(){      

// 线程体 线程启动时 会自动调用本方法所以这里我们写代码的主体部分      System.out.println("线程启动成功");         

    }

}

测试

package cn.xiejian.Test;

import cn.xiejian.MyThread.MyThread;public classTest{  

 public static void main(String[]args) {     

 MyThread t=newMyThread();      t.start();

//调用Thread的start方法jvm会自动调用run方法   

      }

}

但实际开发中我们很少用这种方式 为什么呢?因为我们知道java是单继承 多实现的 所以这种方式的拓展性不强我们通过实现Runnable接口来创建线程

package cn.xiejian.MyThread;

public class MyRunnable implementsRunnable{  

 @Override  

 public void run(){    

  // 线程体 线程启动时 会自动调用本方法所以这里我们写代码的主体部分            System.out.println("线程启动成功");       

  }

}

测试:

package cn.xiejian.Test;

import cn.xiejian.MyThread.MyRunnable;public class Test2 {

public static void main(String[] args){   

MyRunnable tr=newMyRunnable();   

Thread t=newThread(tr);  

 t.start();        

 }

}

为什么要向传入tr呢?

源码是这样写的

 public Thread(Runnable target) {

       init(null, target, "Thread-" + nextThreadNum(),0);   

}

线程的执行随机性

一旦一个线程启动之后就是一个独立的线程 等待cpu的调度分配资源 不会因为启动它的外部线程结束而结束

package cn.xiejian.Test;

import cn.xiejian.MyThread.MyThread;public classTest{ 

  public static void main(String[]args) {      

MyThread t=newMyThread();     

 t.start();//调用Thread的start方法jvm会自动调用run方法    

  for (int i = 0; i <10; i++){   

      System.out.println("main-->"+i);    

 }   

}

}


package cn.xiejian.MyThread;

public class MyThread extendsThread{   

@Override  

 public void run(){   

   // 线程体 线程启动时 会自动调用本方法所以这里我们写代码的主体部分    

  for (int i = 0; i <10; i++) {         

System.out.println("MyThread-->"+i);    

 }        

 }

}

输出结果:

MyThread-->0

MyThread-->1

MyThread-->2

main-->0

MyThread-->3

MyThread-->4

main-->1

main-->2

main-->3

main-->4

main-->5

main-->6

main-->7

main-->8

main-->9

MyThread-->5

MyThread-->6

MyThread-->7

MyThread-->8

MyThread-->9

由于1线程的随机性,2多线程访问出现网络延迟​导致线程出现安全性问题

第一次写 就写写入门级的把 希望大家多多指教 谢谢​

​

0 0
原创粉丝点击