Java多线程学习综合

理解线程的概念
掌握线程的创建和启动
了解线程的状态
掌握线程调度的常用方法
掌握线程的同步

了解为什么要学习多线程
多线程开发在软件开发领域有着重要地位
多线程开发有点明显
多线程是绝大多数面试必问点

理解进程与线程的概念
进程(打开软件开了一个进程)
应用程序的执行实例
有独立的内存空间和系统资源
线程(软件多个功能,相当于开了多个进程)
CPU调度和分派的基本单位
执行运算的最小单位,可完成一个独立的顺序控制流程
(CPU工厂 进程车间 线程工人共享车间)
理解什么是多线程
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为”多线程“
多个线程交替占用CPU资源,而非真正的并行执行

多线程好处
充分利用CPU的资源,提升代码性能
简化编码模型,更好的软件设计和架构
带来良好的用户体验

总结:
线程
	CPU调度和分派的基本单位
	执行运算的最小单位,可完成一个独立的顺序控制流程
	如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为”多线程“
	多个线程交替占用CPU资源,而非真正的并行执行

线程初体验
通过代码初步感受线程
Thread类
Java提供了Java.lang.Thread类支持多线程编程
主线程
main()方法即为主程序入口
产生其他子线程的线程
必须最好完成执行,因为它执行各种关闭动作

掌握如何获取主线程及线程名称
//获取和设置主线程(名称)
public class MainThread{
	public static void main(String[] args){
		//获取当前的线程对象
		Thread thread = Thread.currentThread();
		//获取当前线程对象的名称
		String name = thread.getName();
		System.out.println("当前线程是:"+name);//main
		//为当前线程重新设置名称
		thread.setName("MyThread");
		name = thread.getName;
		System.out.println("当前线程是:"+name);//MyThread
	}
}

继承Thread创建线程
掌握如何通过继承Thread创建和启动线程
在Java中创建线程的第一种方式
继承java.lang.Thread类
1、定义MyThread类继承Thread类
2、重写run()方法,编写线程执行体
3、创建线程对象,调用start()方法启动线程
//创建并启动线程
public class MyThread extends Thread{
public void run(){
for(int i = 1;i <= 100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
//测试类
public class TestThreat{
public static void main(String[] args){
//创建线程对象
MyThread mythread = new MyThread();
MyThread mythread1 = new MyThread();
//启动线程
mythread.start();
mythread1.start();
}
}
多个线程交替占用CPU资源,不是真正的“并行”
线程每次执行时长由分配的CPU时间片长度决定
启动线程是否可以直接调用run()方法?
不可以
(1)只有主线程一个执行路径
(2)依次调用了两次run()方法
run()方法被当作main()中的一个普通方法执行,失去了线程的意义
总结:
1、定义线程->2、创建线程对象->3、启动线程->4、终止线程

实现Runnable创建线程
掌握如何通过实现Runnable创建线程
定义MyRunnable类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
//创建线程,实现Runnable接口
public class MyThread2 implements Runnable{
public void run(){
for(int i = 1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
//测试线程
public class TestThreat2{
public static void main(String[] args){
//创建线程对象
Runnable runnable = new MyThread2;
//Thread thread = new Thread(runnable);
Thread thread = new Thread(runnable,“MyThread1”);
Thread thread2 = new Thread(runnable,“MyThread2”);
//启动线程
thread.start();
thread2.start();
}
}
总结:
定义类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
Thread(Runnable target)
Thread(Runnable target,String name)

线程创建两种方式的区别
掌握通过继承Thread与实现Runnable创建线程的区别
在Java中创建线程的两种方式
继承java.lang.Thread类
实现java.lang.Runnable接口

	继承Thread类
		编写简单,可直接操作线程
		适用于单继承
	实现Runnable接口
		避免单继承局限性
		便于共享资源
	(推荐使用实现Runnable接口方式创建线程)
	
	//创建线程,模拟售票的过程
	public class MyThread1 extends Thread{
		private int ticket = 10;
		
		public void run(){
			for(int i = 1;i<= 10;i++){
				if(this.ticket>0){
					System.out.println(Thread.currentThread().getName()+"买票-"+this.ticket--);
				}
			}
		}
	}
	//测试线程(继承Thread类的方式)
	public class TestThread1{
		public static void main(String[] args){
			MyThread1 t1 = new MyThread1();
			t1.setName("窗口1");
			MyThread1 t2 = new MyThread1();
			t2.setName("窗口2");
			t1.start();
			t2.start();
		}
	}//没有共享票数
	
	//创建线程,模拟售票的过程
	public class MyThread2 implements Runnable{
		private int ticket = 10;
		
		public void run(){
			for(int i = 1;i<= 10;i++){
				if(this.ticket>0){
					System.out.println(Thread.currentThread().getName()+"买票-"+this.ticket--);
				}
			}
		}
	}
	//测试线程(实现Runnable接口的方式)
	public class TestThread2{
		public static void main(String[] args){
			Runnable runnable = new MyThread2();
			
			Thread t1 = new Th
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值