java多线程基础

1.在将多线程的前提下我先讲讲线程和进程的关系

进程,一个应用对应一个进程,操作系统(OS)管理进程,进程启动需要资源CPU,内存。OS分配资源给进程,一个进程下面可以有很多线程,用来执行代码,线程不能脱离进程独立运行首先。JVM(关于Java虚拟机)是一个进程,JVM会创建一个专门的一个线程(main)去执行main方法,JVM中还有GC垃圾回收的线程等等。


2.线程分为前台线程,和后台线程

前台线程    代码(new Thread()...)
后台线程    JVM分配的线程(main)


3.单线程,多线程

单线程:顺序执行

多线程:线程各自执行不一定有先后


4.简单示例

[java]  view plain  copy
  1. public class ThreadTest {  
  2.     public static void main(String[] args) {  
  3.         Thread thread = Thread.currentThread();//获取当前线程对象  
  4.         System.out.println(thread.getName());//当前线程的名字main  
  5.         System.out.println("开始");  
  6.         ThreadTest test = new ThreadTest();  
  7.         test.test();  
  8.         System.out.println("结束");  
  9.         MyThread myThread = new MyThread();//自定义线程  
  10.         System.out.println("开始");  
  11.         myThread.start();//启动线程,run方法内部自动调用  
  12.         System.out.println("结束");  
  13.     }  
  14.     public void test(){  
  15.         Thread thread = Thread.currentThread();  
  16.         //System.out.println(thread.getName());//线程的名字main  
  17.         for(int i = 0;i < 10; i++){  
  18.             //此时线程main在这里出不去了,直到执行完  
  19.                         //线程的名字main  
  20.                        System.out.println("nihao"+"线程名字"+thread.getName());  
  21.         }  
  22.     }  
  23. }  
  24.   
  25. //run方法就是线程需要执行的代码  
  26. class MyThread extends Thread{  
  27.     @Override  
  28.     public void run() {  
  29.         Thread thread = Thread.currentThread();  
  30.         //System.out.println(thread.getName());//线程的名字Thread-0  
  31.         for(int i = 0;i < 10; i++){  
  32.             //线程名字Thread-0  
  33.             System.out.println("nihao"+"线程名字"+thread.getName());  
  34.         }  
  35.     }  
  36. }  

结果:

[html]  view plain  copy
  1. 开始  
  2. nihao线程名字main  
  3. nihao线程名字main  
  4. nihao线程名字main  
  5. nihao线程名字main  
  6. nihao线程名字main  
  7. nihao线程名字main  
  8. nihao线程名字main  
  9. nihao线程名字main  
  10. nihao线程名字main  
  11. nihao线程名字main  
  12. 结束  
  13. 开始  
  14. 结束  
  15. nihao线程名字Thread-0  
  16. nihao线程名字Thread-0  
  17. nihao线程名字Thread-0  
  18. nihao线程名字Thread-0  
  19. nihao线程名字Thread-0  
  20. nihao线程名字Thread-0  
  21. nihao线程名字Thread-0  
  22. nihao线程名字Thread-0  
  23. nihao线程名字Thread-0  
  24. nihao线程名字Thread-0  

由上可以得出JVM自己创建了线程main(主线程)自动生成,子线程Thread-0,实现的多线程

由于“开始”“结束”是在主线程main中执行,所以打印“结束”就可能在子线程前面执行


5.线程的创建

匿名内部类内重写run方法

[java]  view plain  copy
  1. Thread t1 = new Thread(){  
  2.     @Override  
  3.     public void run() {  
  4.         //重写方法内容  
  5.     }  
  6. };  
  7. t1.start();  

继承Thread重写run方法

[html]  view plain  copy
  1. class MyThread extends Thread{  
  2.     @Override  
  3.     public void run() {  
  4.           
  5.     }  
  6. }  
  7. MyThread myThread = new MyThread();  
  8. myThread.start();//启动线程,run方法内部自动调用  

实现Runnable接口实现run方法

[html]  view plain  copy
  1. public class TreadTest2 implements Runnable{  
  2.     @Override  
  3.     public void run() {  
  4.           
  5.     }  
  6. }  
  7. Runnable t = new TreadTest2();  
  8. Thread thread = new Thread(t);  
  9. thread.start();   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值