java学习第二十二天

本文详细介绍了Java中的多线程概念,包括进程、线程、多线程实现方式,如继承Thread类,设置和获取线程名称,以及线程调度和控制。同时,讲解了线程同步的重要性,如同步代码块、同步方法和线程安全的类,并涉及到Lock锁的使用。此外,还探讨了线程的生命周期,包括新建、就绪、运行、阻塞和死亡状态。示例代码展示了如何创建和控制线程以及进行线程同步。
摘要由CSDN通过智能技术生成

目录

一、实现多线程
1进程
2线程
3多线程的实现方案
4设置和获取线程名称.
5线程调度
6线程控制
7线程生命周期
8多线程的实现方式
二、线程同步
1卖票
2同步代码块
3同步方法
4线程安全的类
5 Lock锁

1进程

进程:是正在运行的程序

●系统进行资源分配和调用的独立 单位

●每一个进程都有它自己的内存空间和系统资源

2线程

线程:是进程中的单个顺序控制流,是一条执行路径
●单线程: 一个进程如果只有一条执行路径,则称为单线程程序
●多线程: 一个进程如果有多条执行路径,则称为多线程程序
3多线程的实现方案

方案1:继承Thread类
定义一个类MyThread继承Thread类
●在MyThread类中重写run()方法
创建MyThread类的对象

4设置和获取线程名称.

Thread类中设置和获取线程名称的方法
●void setName(String name):将此线程的名称更改为等于参数name
String getName():返回此线程的名称
通过构造方法也可以设置线程名称

package Demo01;
/*/
 * 主线程 执行main方法的线程
 * 单线程程序:只有一个线程在执行,从头到尾
 */
public class demo01MAainThread {
	public static void main(String[] args) {
		Person p1=new Person("强");
		p1.run();
		//System.out.println(0/0);
		Person p2=new Person("明");
		p2.run();
	}
	
	

}



package Demo01;
/*/
 * java.long.Thread
 * 实现步骤:
 * 1.创建一个Thread类的子类
 * 2.在Thread子类中重写run方法,设置线程任务(干什么)
 * 3.创建Thread子类的对象
 * 4.调用Thread类中的方法start来启动线程,执行run方法
 */
public class Demo01Thread {
	public static void main(String[] args) {
		//3.创建子类对象
		MyThread mt=new MyThread();
		//4.调用start方法
		mt.start();
		
		for(int i=0;i<20;i++) {
			System.out.println("主线程: "+i);
			//if(i==10)
				//System.out.println(0/0);
		}
		
	}

}



5线程调度

线程有两种调度模型
分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片

抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个, 优先级高的线程

6线程控制

package demo02;
/*/
 * java.long.Thread
 * 实现步骤:
 * 1.创建一个Thread类的子类
 * 2.在Thread子类中重写run方法,设置线程任务(干什么)
 * 3.创建Thread子类的对象
 * 4.调用Thread类中的方法start来启动线程,执行run方法
 */
public class Demo01Thread {
	public static void main(String[] args) {
		//3.创建子类对象
		MyThread mt=new MyThread();
		//4.调用start方法
		mt.start();
		
		
		
		new MyThread().start();
		new MyThread().start();
		new MyThread().start();
		
		System.out.println("main: "+Thread.currentThread().getName());
		
	}

}


```java
package demo02;

public class Demo02ThreadSetName {
	public static void main(String[] args) {
		MyThreadName mt=new MyThreadName("强");
		mt.start();
		new MyThreadName("小狗").start();
	}

}



7线程生命周期

线程的生命周期:也就是线程从生到死的过程。它分为这样的几个过程:新建,就绪,运行,死亡
但是在运行的过程中,可能会因为其他方法的调用,而让该线程处于一种新的过程:阻塞

```java
package demo03;

public class Demo03Sleep {
	public static void main(String[] args) {
		for(int i=1;i<10;i++) {
			System.out.println(i);
			
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值