线程笔记(自用)

本文介绍了Java中的线程基本概念,包括进程与线程的区别,线程的创建与运行,以及如何通过实现Runnable接口创建线程。此外,还讨论了线程同步中的锁机制,并举例说明了死锁的概念,强调了避免死锁的重要性。通过实例展示了如何在Java中使用synchronized关键字进行同步控制。

1.线程的基本概念(一个进程不同的执行路径)(一个时间点一个 cpu只能进行一个线程) 锁和时间片

  • 线程是一个程序内部的顺序控制流。
  • 线程和进程的区别
    • 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
    • 线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。
    • 多进程:在操作系统中能同时运行多个任务(程序)。
    • 多线程:在同一应用程序中有多个顺序流同时执行。

*java的线程是通过java.lang.Thread类来实现的。
*VM启动时会有一个由主方法(public static void main(){} )所定义的线程。
*可以通过创建Thread的实例来创建新的线程。
*每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。
*通过调用Thread类的start()方法来启动一个线程。

在这里插入图片描述

//能用接口就不要用继承
public class TestThread1 {
	public static void main(String[] args) {
		Runner1 r = new Runner1();
		Thread t = new Thread(r);
		t.start();//线程启动 (必须)
		
		for (int i = 0; i < 100; i++) {
			System.out.println("???????" + i); 
		}
	}
}

class Runner1 implements Runnable {
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("Runner1" + i);
		}
	}
}

在这里插入图片描述
在这里插入图片描述
死锁
在这里插入图片描述
1、 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
2、每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值