线程Thread 线程创建及其常用方法

线程


什么是进程?

  • 通过任务管理器我们就可以看到进程的存在
  • 进程就是正在运行中的程序,是系统进行资源分配和调用的独立单位,每个进程都有它自己的内存空间和系统资源。

多进程有什么意义?

  • 单进程计算机只能做一件事情,而我们现在的计算机都可一边听歌一边玩游戏,所以我们常见的操作系统都是多线程操作系统。Windows、Mac、linux等,能在同一个时间段内执行多个任务。
  • 单核计算机,游戏进程和音乐进程是同时运行的吗?
    • 不是
    • 因为CPU在某个时间点只能做一件事情,就算在游戏进程和音乐进行中做着频繁切换,且切换速度很快,所以,让我们感觉游戏和音乐在同时运行,其实并不是同时执行的。
  • 多进程的作用不是提高执行速度,而是提高CPU使用率。

什么是线程?

  • 在一个进程的内部又可以执行多个任务,而这每一个任务我们就可以看作是一个线程。线程他是程序中控制流,是程序使用CPU的基本单位。

多线程意义?

  • 多线程的作用不是提高执行速度,而是为了提高应用程序使用率。
  • 错觉:让我们认为多个线程是并发执行的,并不是
    • 因为多个线程共享同一个进程资源(堆内存和方法区),但是栈内存是独立的吗,一个线程一个栈,所以他们任然实在抢CPU的资源执行,一个时间点上只能有一个线程执行,谁抢到谁就执行,不知道谁能抢到,所以造成线程运行的随机性。

什么是并发?

  • 并行和并发
    • 前者是逻辑上同时发生,指在某一个时间内运行多个程序。
    • 后者是物理上同时发生,指在某一个时间点同时运行多个程序。

线程的实现

  • 方式一:继承Thread类
  • 步骤:
    • 自定义类MyThread 继承Thread类
    • MyThread重写run方法
    • 创建对象
    • 启动线程
  • 第二种:实现Runnable接口,完成线程创建
public class MyThread extends Thread{
	
	public MyThread(String name) {
		super(name);
	}

	@Override
	public void run() {
		System.out.println(this.getName());
	}
	
	public static void main(String[] args) {
		MyThread t = new MyThread("线程一");
		t.start();
		MyThread tt = new MyThread("线程二");
		tt.start();
	}
} 
public class IPLMThread implements Runnable{

	private String name;
	
	public IPLMThread(String name) {
		this.name = name;
	}
	
	@Override
	public void run() {
		System.out.println(this.name);
	}

	public static void main(String[] args) {
		IPLMThread t = new IPLMThread("线程一");
		IPLMThread tt = new IPLMThread("线程二");
		new Thread(t).start();
		new Thread(tt).start();
	}
} 

线程常用方法

long		 	getId​() 		返回此线程的标识符。  
String		 	getName​() 		返回此线程的名称。  
int 			getPriority​() 	返回此线程的优先级。 
static int 		MAX_PRIORITY 	线程可以拥有的最大优先级。  
static int 		MIN_PRIORITY 	线程可以拥有的最小优先级。  
static int 		NORM_PRIORITY 	分配给线程的默认优先级。  
Thread.State 	getState​() 		返回此线程的状态。  
static boolean	interrupted​() 	测试当前线程是否已中断。  
boolean 		isAlive​() 		测试这个线程是否活着。  
boolean			isDaemon​() 		测试这个线程是否是守护线程。  
void 			join​() 			等待这个线程死亡。 才继续执行下个
void		 	setName​(String name) 	将此线程的名称更改为等于参数 name 。  
void		 	setPriority​(int newPriority) 	更改此线程的优先级。 
static void 	sleep​(long millis) 		睡眠(单位毫秒)
void 			start​() 		启动线程
static void 	yield()      	放在线程体中操作,暂停当前正在执行的线程对象
								(及放弃当前拥有的cup资源)并执行其他线程。让多个
								线程的执行更和谐,但是不能靠他保证一人一次。
 void 			setDaemon(boolean on) 将指定线程标记为守护线程或用户线程。
 								当正在运行的线程都是守护线程时,Java 虚拟机退出。

static Thread 	currentThread() 返回当前正在执行线程对象



线程生命周期

            阻塞
              |
 新建--->就绪--->运行--->死亡
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值