摘要:
1:继承Thread类创建线程类 步骤: (1)线程类继承Thread类,并对Thread类中的run()方法进行重写 (2)创建线程类对象。 (3)调用线程对象的start()方法来启动该线程。 注意:run()方法是线程执行体,但并不是所有线程的执行体都是run()方法。主线程的线程执行体就是m 阅读全文
摘要:
线程的生命周期中有5个状态:创建、就绪、运行、阻塞、死亡。其中从就绪到运行,这两个状态的切换存在不确定因素,需要等待cpu的调度,获取cpu的时间片。 1:新建和就绪状态 当程序使用new关键字创建了一个线程之后,该程序处于创建状态。 当线程调用start()方法之后,该线程处于就绪状态。 注意:启 阅读全文
摘要:
1:线程为什么要同步? 在多线程的情况下,容易造成数据的安全问题。比如取钱操作,涉及到金钱方面的,强烈建议使用线程同步。 线程同步主要有两种方式,一种是synchronized(同步监视器),一个是lock锁。 synchronized synchronized关键字的同步方式: (1)同步代码块( 阅读全文
摘要:
1:传统的线程通信 传统的线程通信是借助wait()、notify()、notifyAll()三个方法的。这三个方法是Object的,并不是Thread方法的。需要注意的是:这三个方法必须由同步监视器对象来调用,这可以分为以下两种情况: (1)对于使用synchronized的同步方法,默认的隐式同 阅读全文
摘要:
1:join线程 线程插队: 控制台输出: 可以看到thread线程在调用了join方法之后,开始进行了“插队”操作,主线程mian要等待thread线程执行完之后再执行。 join()方法有如下三种重载方式(会抛出InterruptedException异常): (1)join():等待被join 阅读全文
摘要:
每次学习线程都是浅尝辄止的状态,这次下定决心是非学到60%入门不可,记录下:2019/11/27 正文: 线程的5个状态: 创建、就绪、运行、阻塞、死亡 线程状态图: 和线程有关的两个方法:start() 和run() start()方法是让线程到可运行状态。run()方法的主体就是线程要执行的方法 阅读全文
摘要:
线程优先级,这是在我学习线程的时候有点疑惑的地方,今天记录一下。 先上代码: 执行结果(注意,每次执行的结果几乎都会与上次不一样): 恩?这就很意外了呀?为啥?我明明设置了thread3线程优先级最高呀,为啥是第二个执行的,而thread1的优先级却只有1而是最高执行的? 原来在线程中有一个很重要的 阅读全文
摘要:
线程的创建方式: 1:通过继承Thread类来创建线程。 2:通过实现Runnable接口来创建线程。 然后在Main方法里分别创建通过继承Thread类和实现Runnable接口的线程,如下图: 我们可以看见:通过继承Thread类的创建线程是直接new 一个对象的。而通过实现接口的是new 一个 阅读全文
摘要:
1:继承Thread类的创建线程 (1)实例变量 运行结果: 从上图可以看出,A线程和B线程各执行5次,得出:由继承Thread类创建的线程,实例变量并不共享。 (2)类变量(静态变量) 运行结果: 从上图可以看出,A和B总共执行了5次,得出:由继承Thread类创建的线程,类变量共享。 2:实现R 阅读全文