一、理解进程与线程
进程:应用程序的执行实例;例如 微信,qq ,进程有对应的内存空间 和 系统资源
线程:将进程可以进一步细分为线程;CPU调度和分派的最小单位
在Java中多线程前提是:研究的单核CPU
**********************宏观并行,微观串行****************************
单核CPU中不存在真正的并行概念,多个线程实际是在交替的占用CPU,并不是真的并行执行
二、多线程的好处
一般来讲,多线程可以充分利用CPU资源,提高效率
注意:多线程并不是越多越好,因为每开启1个线程,会占用1M左右个内存空间,因此线程太多会占用大量的内存空间,单线程有时候性能也非常不错。
/*我们一直在使用的Main()就是一个线程,并且是主线程*/
三、获取当前线程
//获取当前线程 用.currentThread()方法
Thread thread=Thread.currentThread();
//获取线程的名字 用.getName()
thread.getName();
//设置线程的名字 用.setName()
thread.setName(" ");
public class test1 {
public static void main(String[] args) {
//获取当前线程
Thread thread=Thread.currentThread();
//获取线程的名字
System.out.println(thread.getName());
//设置线程的名字
thread.setName("hello");
System.out.println(thread.getName());
}
}
四、创建线程的两种基础方式
1、继承java.lang.Thread类
//继承Thread类
public class Thread1 extends Thread{
//线程的执行方法run()
@Override
public void run(){
for(int i = 0;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args){
Thread1 t1 = new Thread1();
t1.setName("T1")
t1.start();
}
}
2、实现java.lang.Runnable接口
//实现Runnabla接口
public class Thread2 implement Runnable{
@Override
public void run(){
for(int i =0;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
//Runnable方法仍然借用Thread来实现多线程
public static void main(String[] args){
//创建对象
Thread2 t2=new Thread();
//启动线程需要start()方法,但是Runnable接口中没有
//将Thread->Runnable
//Thread(Runnabel),相当于将t1对象转换为Thread对象T1
Thread T1= new Thread(t1);
//然后T1就可以使用start()方法了
T1.start();
}
}
五、总结
创建线程的两种基础方式
1、继承java.lang.Thread类
2、实现java.lang.Runnable接口
3、多线程之间是在争夺资源
4、线程在执行时有两种重要的方法:
>将线程的执行逻辑(线程要做的事)写在run()中
>启动线程,是通过start()启动。start()=准备资源+调用run()。
在开发中推荐使用Runable实现多线程。现在主流是面向接口开发