java多线程基础

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

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


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

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


3.单线程,多线程

单线程:顺序执行

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


4.简单示例


public class ThreadTest {
	public static void main(String[] args) {
		Thread thread = Thread.currentThread();//获取当前线程对象
		System.out.println(thread.getName());//当前线程的名字main
		System.out.println("开始");
		ThreadTest test = new ThreadTest();
		test.test();
		System.out.println("结束");
		MyThread myThread = new MyThread();//自定义线程
		System.out.println("开始");
		myThread.start();//启动线程,run方法内部自动调用
		System.out.println("结束");
	}
	public void test(){
		Thread thread = Thread.currentThread();
		//System.out.println(thread.getName());//线程的名字main
		for(int i = 0;i < 10; i++){
			//此时线程main在这里出不去了,直到执行完
                        //线程的名字main
                       System.out.println("nihao"+"线程名字"+thread.getName());
		}
	}
}

//run方法就是线程需要执行的代码
class MyThread extends Thread{
	@Override
	public void run() {
		Thread thread = Thread.currentThread();
		//System.out.println(thread.getName());//线程的名字Thread-0
		for(int i = 0;i < 10; i++){
			//线程名字Thread-0
			System.out.println("nihao"+"线程名字"+thread.getName());
		}
	}
}

结果:

开始
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
nihao线程名字main
结束
开始
结束
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0
nihao线程名字Thread-0

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

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


5.线程的创建

匿名内部类内重写run方法

Thread t1 = new Thread(){
	@Override
	public void run() {
		//重写方法内容
	}
};
t1.start();

继承Thread重写run方法

class MyThread extends Thread{
	@Override
	public void run() {
		
	}
}
MyThread myThread = new MyThread();
myThread.start();//启动线程,run方法内部自动调用


实现Runnable接口实现run方法


public class TreadTest2 implements Runnable{
	@Override
	public void run() {
		
	}
}
Runnable t = new TreadTest2();
Thread thread = new Thread(t);
thread.start(); 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值