多线程笔记一

一 、多线程的概念程

1.1 进程和线程的区别

进程:进程是一种正在运行的程序,有独立的运行空间和系统资源
线程:线程是进程中一个最小的执行单位,可以从头至尾的完成认为执行流程

1.2 主线程与子线

主线程:Java程序默认启动的线程,由虚拟机创建线程的入口-main方法
子线程:由主线程启动起来的线程则是子线程

二、 多线程的使用

2.1 创建线程的方式

一   Thread方式
	1  继承Thread类,重写Thread类的run方法
	2  创建Thread子类对象
	3  调用子类对象的start()方法
二  Runnable方式
	1  实现Runnable接口,创建接口的实现类对象
	2  创建Thread类行对象,并在构造方法中传入接口实现类对象
	3   调用线程对象的start()方法

	注意:
	1  Thread实现了Runnable类,可以定义Thread的子类并覆盖run方法实现自定义的线程类
	2  不推荐这种方式,因为这将任务和运行任务的机制混在了一起
	3  任务与线程分离更好的体现了面想对象思想,避免了由Java单继承带来的局限及有利于代码被多个线程共享

2.2 创建线程的代码实例

/** 继承Thread类的方式创建方式*/
public class ThreadDemo1 extends Thread {
@Override
public void run() {
   		 System.out.println("用继承Thread的方式创建线程");
    }

public static void main(String[] args) {
  		 ThreadDemo1 threadDemo1=new ThreadDemo1();
  		 threadDemo1.start();
    }
}
/** 用实现Runnable的方式创建线程 */
public class ThreadDemo2 {
    public static void main(String[] args) {
        ThreadRunnable threadRunnable =new ThreadRunnable();
        Thread thread=new Thread(threadRunnable);
        thread.start();
    }
}
class ThreadRunnable implements Runnable{

   @Override
    public void run() {
        System.out.println("用实现Runnable的方式创建线程");
    }
}

2.3 线程中的主要方法

Thread():创建一个空线程
Thread(tasl:Runnable):为指定任务创建一个线程
start():void:启动线程,使run方法能够被JVM调用
isAlive():boolean:返回当前线程是否正在运行
setPriority(prionity:int):void:设置线程的优先级(1-10)
join():等待当前线程结束
sleep(millis:long):void:使线程休眠指定毫秒数
yield():void:使线程暂停并允许执行其他线程(但是此方法只是暂停线程,让此线程与其他线程回到同一的起跑线,有可能还是此线程先抢到使用权)

三 、线程的生命周期

3.1 线程的主要状态

新生:创建对象
就绪:准备执行
运行:正在执行,此处可能根据情况随时回到就绪状态
阻塞:线程因为某种原因在等待执行
死亡:执行结束

3.2 线程的优先级

设置优先级的方法:setPriority(prionity:int):void:设置线程的优先级(1-10)
注意:
1、优先级表示重要程度或紧急程度,不能决定是否一定先执行(不一定能抢到资源)
2、为避免竞争现象,高优先级的线程可以定时调用sleep()方法或yield()方法,来给低优先级或相同优先级线程运行的机会
3、线程优先级设置会影响线程抢占资源的概率,但是优先级不会绝对的影响执行,即优先级越高概率越高,但不会导致低优先级的线程无法执行

3.3 线程休眠

1  Thread.sleep()
Thread.sleep(毫秒),会让当前线程进入休眠状态,此时没有资源耗费
2  TImeUnit
TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段
主要作用
	时间颗粒度转换
	延时
常用的颗粒度
	TimeUnit.DAYS					天
	TimeUnit.HOURS					小时
	TimeUnit.MINUTES				分钟
	TimeUnit.SECONDS     	  		秒
	TimeUnit.MILLISECONDS			毫秒

时间颗粒度转换代码如下:

pubilc long toMillis(long d)				//转化成毫秒
public long toSeconds(long d)				//转化成秒
public long toMinutes(long d) 				//转化成分钟
public long toHours(long d)					//转化成小时
public long toDays(long d)   				//转化成天
延时方法
	TimeUnit.DAYS.sleep(天);						
    TimeUnit.HOURS.sleep(小时);						
    TimeUnit.MINUTES.sleep(分钟);						
    TimeUnit.SECONDS.sleep(秒);     	  	
    TimeUnit.MILLISECONDS.sleep(毫秒);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值