JavaSE-day17

JavaSE-day17

进程

概念:一个正在进行的程序
一个程序在准备运行时,系统会为其一片开辟一片内存空间(运行内存)

线程

概念:一个执行路径
注意:
		1、一个进程自带一个线程,该线程称为主线程(main)
		2、一个进程可以有多个线程,一个进程有多个线程被称为多线程

多线程

概念:一个进程有多个线程被称为多线程
注意:
		1、多个线程在宏观上是同步执行的
		2、微观上是多个线程在同时抢夺CPU执行权

线程的组成

CPU时间片
	一个线程抢到CPU执行权后可以执行的时间
运行数据
	一个线程拥有一个独立的栈
	多个线程共享一个堆内存
代码逻辑

线程的使用

创建

方案一中情况1(创建Thread(类)子类的对象)
	步骤:
			1、创建一个类让其继承于Thread
			public class 类名  extends  Thread{
			
			}
			2、重写run方法(run中代码就是该程序执行的代码)
			public class 类名  extends  Thread{
				public void run(){
				
				}
			}
			3、创建该类线程对象
			Thread 对象名 = new Thread();
方案一中情况2 (使用匿名内部类创建Thread(类)子类的对象)   
	步骤:
			1、使用匿名内部类创建Thread的子类对象,并重写run方法
			匿名内部类的语法格式:    
				类名/接口名 对象名 = new 类名/接口名(){
					要重写的方法
				}  
				Thread thread = new Thread(){
					public void run(){
						
					}
				}   
方案二中情况1 (将线程任务(Runnable接口)与线程(Thread)分开)	
	步骤:
			1、创建线程任务对象	
				1.1创建一个类实现Runnable接口
				public class Myrunnable implements Runnable{
			
				}
				1.2重写run方法
				public class Myrunnable implements Runnable{
						public void run(){
						}
				}
				1.3创建线程任务对象(main函数中)
				Runnable runnable = new Runnable();
			2、创建线程对象		
				2.1创建线程对象,创建的同时将线程任务对象传入线程对象的实参列表
				public class Test{
					public static void main(String[] args){
							MyRunnable myRunnable = new MyRunnable();
					
					}
				}
方案二中情况2 (将线程任务(Runnable接口)与线程(Thread)分开  使用匿名内部类)	
	步骤:
			1:创建线程任务对象,使用匿名内部类的形式创建
			public class Test{
				public static void main (String[ ] args){
					Runnable runnable = new Runnable(){
						public void run(){
						}
					};
				}
			}
			2、创建线程对象,创建的同时将线程任务对象传入线程对象的实参列表
			public class Test{
				public static void main (String[ ] args){
					Runnable runnable = new Runnable(){
						public void run(){
						}
					};
					Thread thread = new Thread(Runnable);
				}
			}
			注意:Thread类与Runnable接口由JDK提供

启动

语法:
	线程对象名.start();
注意:
	一个线程只能启动一次

关闭

注意:
	1、线程一旦启动,无法控制
	2、线程执行完run方法中的代码后,将进入到等待销毁状态

名称

语法
	设置线程名称
		方式一:创建线程对象时设置
			new Thread(线程名称);
			new Thread(线程任务,线程名称);
		方式二:使用线程对象名调用setName方法
			线程对象名.setName(线程名称);
			注意:在线程启动前设置线程名称
	获取线程名称:
		语法
			string name = 线程对象名.getName();

如何获取当前线程对象(currentThread)

语法
	Thread thread = Thread currentThread();

优先级(setPriority)

语法
	线程对象名.setPriority(优先级);
注意:优先级取值范围为1-10

礼让(yield)

语法
	线程对象名.yield();

休眠(sleep)

语法
	Thread.sleep(休眠时间);
	或
	线程对象名.sleep(休眠时间);
注意:
	1、休眠时间的单位为毫秒
	2、使用时有异常,需要解决
	3、程序在休眠时不会抢夺CPU执行权

合并(join)

语法
	线程对象名.join();
注意:
	在线程A的run方法中使用线程对象B调用该方法,表示将B对应的线程中的run方法中没有执行完的代码合并到线程A中

守护线程(setDaemon)与前台线程

前台线程
	一个线程创建时默认就是前台线程
	如果一个进程中有前台线程存活,那么该进程不会被系统所回收
守护线程(后台线程)
	如果一个进程中所有前台进程都被销毁了,那么该进程也会被销毁,此时若进程中还有守护进程没有执行完,那么该守护线程也将被销毁
如何设置一个线程为守护线程?
	语法
		线程对象名.setDaemon(true);
	注意:必须在线程启动前设置

线程的状态

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值