持之以恒,量变引起质变,唯有勤奋可以弥补差距
线程 ,多线程, 单线程
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
线程:是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
package day17.demo01;
//线程创建public class Test01 {public static void main(String[] args) {SubThread st = new SubThread();//st.setName("张记");st.start();Thread t = Thread.currentThread();for (int i = 0; i < 50; i++) {System.out.println(t.getName()+"..."+i);}}}
Thread 类
Java使用
java.lang.Thread
类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。Java中通过继承Thread类来创建并启动多线程的步骤如下:
定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体。
创建Thread子类的实例,即创建了线程对象
调用线程对象的start()方法来启动该线程
package day17.demo01;
/*
* join方法是让 当前线程等待,
* 调用方法的线程进行插队先执行,
* 执行完毕后,在让当前线程执行.
* 对其他线程没有任何影响.
* 注意 此处的当前线程不是调用方法的线程
* 而是Thread.currentThread().
*
* */
public class Test06 {public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new Runnable() { //t1线程@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("t1 "+i);}}});Thread t2 = new Thread(new Runnable() { // t2线程@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("t2 "+i);}}});t1.start();//t1.join();//t1插队加入 主线程等待 t1执行完毕之后main和 t2 抢执行t2.start();t1.join();//t1插队加入 主线程等待 t1 和 t2 抢执行 之后执行 main方法for (int i = 0; i < 10; i++) {System.out.println("main "+i); //主线程执行}}
}
package day17.demo01;
//匿名内部类 开启子类对象
public class Test03 {public static void main(String[] args) {// Thread 类的子类对象Thread t = new Thread(){@Overridepublic void run() {System.out.println("11");}}; //匿名内部类t.start();new Thread(){@Overridepublic void run() {System.out.println("22");}}.start();Runnable r = new Runnable() {@Overridepublic void run() {System.out.println("33");}
};
new Thread(r).start();}
}
线程安全问题
package day17.demo01;public class SellTickets implements Runnable {private int i = 100;@Overridepublic void run() {while (true) {synchronized (this) {if (i > 0) {try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "----" + i);i--;} else {break;}}}}}
package day17.demo01;public class Sellticket {public static void main(String[] args) {SellTickets st = new SellTickets();Thread t1 = new Thread(st);Thread t2 = new Thread(st);Thread t3 = new Thread(st);t1.start();t2.start();t3.start();}
}
java.util.concurrent.locks.Lock
机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。Lock锁也称同步锁,加锁与释放锁方法化了,如下:
public void lock()
:加锁。
public void unlock()
:释放锁。
package day17.demo03.demo01;
// 加锁 线程安全public class SellTickets implements Runnable {private int i = 100;@Overridepublic void run() {while (true) {sell(); //调用方法 sell}}public void sell(){synchronized (this){if( i > 0){try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "卖票了--" + i);i--;}}}
// public void sell2(){
// synchronized (this){
// if( i > 0){
// try {
// Thread.sleep(10);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println(Thread.currentThread().getName() + "卖票了--" + i);
// i--;
// }
// }}
}
package day17.demo03.demo01;public class Sellticket {public static void main(String[] args) {SellTickets st = new SellTickets();Thread t1 = new Thread(st);Thread t2 = new Thread(st);Thread t3 = new Thread(st);t1.start();t2.start();t3.start();}
}
Sleep 方法(睡眠)
public static void sleep(long time)
让当前线程进入到睡眠状态,到毫秒后自动醒来继续执行public class Test{public static void main(String[] args){for(int i = 1;i<=5;i++){Thread.sleep(1000);System.out.println(i) } } }
这时我们发现主线程执行到sleep方法会休眠1秒后再继续执行。
学习需要徐徐渐进,今日学会关于多线程的与原理, 创建, 运用 ,表达.
持之以恒,量变引起质变,唯有勤奋可以弥补差距相关推荐
- 关于“量变”和“质变”的圣贤语录与辩证思考
中国圣贤:天下大事必作于细,天下难事必作于易. 合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下. 不积跬步,无以至千里.不积小流,无以成江海. 夫风生于地,起于青苹之末.风起于青萍之末,浪 ...
- 从量变到质变,新华三不求最大但求最强
算力,早已成为了全行业数字化转型的核心支撑力. 作为全球半导体需求大国,中国市场一直备受业界关注.在中国抗击疫情取得阶段性成果的当下,更具吸引力. 来自联合国贸易和发展会议10月27日发布的报告显示, ...
- guid会不会重复_最笨的方法也许是最快的方法,量变到质变,首先要做的是不断重复...
北宋文学家曾写过这样一则故事. 陈尧咨善于射箭,号称"当世无双",他也很以之自豪,能够八九不离十,实在也算可以的了. 但是有一个普普通通的卖油翁,闲着没事,眯起眼睛,似看非看,毫不 ...
- 【英语系列一】—量变到质变亲体验
英语这个事情,之前在自己心中真的是一个非常大的坎儿,也一直想在英语中有更多的提升,对于坚持的话,稍微有一些动力我就可以坚持一段时间,后来才发现这样坚持的学习并不是长久的~ 不过之前也有过类似的 ...
- 无代码开发平台,量变到质变的飞跃
近年来,无代码开发和低代码开发都是软件行业的热门话题.无代码开发允许用户无需编写代码就可以快速构建应用程序,而低代码允许开发人员通过编写少量代码来快速构建应用程序.这两种方法已经逐渐发展起来,可以支持 ...
- 从量变到质变——AMD打“翻身仗”的秘诀
哲学上有句名言,叫"量变引发质变",意思是,任何一个微小的量经过不断的积累,都有可能带来本质上的不同.如今,用这样一句名言来诠释AMD十分恰当,AMD最近公布了2013年第三季度财 ...
- c语言质变量变,从量变到质变------------学习的必由之路
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 说起<windows程序设计>(Charles Petzold)第5版,全世界人们都知道,这本书是很好的,也知道是很繁杂的,没有人能在短时间内 ...
- 小白程序员怎么由量变到质变写出高质量代码
小白程序员怎么由量变到质变写出高质量代码?很多老程序员从事开发多年,有这样一种感觉,查看一些开源项目,如Spring.Apache Common等源码是一件赏心悦目的事情,究其原因,无外两点: 1.代 ...
- 龙志勇:云游戏的量变与质变 | WISE2022峰会演讲实录
元宇宙和游戏,可以被看做是虚拟世界的不同应用领域.在Web3.0概念大行其道之前,元宇宙偏向于交互与协同,而游戏更注重用户的感官体验.当各个行业开始讨论下一个互联网时代究竟何为主流时,"虚实 ...
最新文章
- uicontrol图形对象用户界面的用法
- (8)JMP FAR段间跳转
- 虚拟主机上传SQLServer数据库--不完全资料
- jsp开发环境的搭建
- python zip()函数的理解与应用
- c++文件流读取一行_「软帝学院」Java挑战者专栏:IO流详解2
- 转(HP大中华区总裁孙振耀退休感言)
- C# Winform DataGridview 实现行号倒序
- Lodop设置打印维护返回打印语句代码
- 清华大学操作系统OS学习(六)——进程和线程
- 缺失值了解与简单处理
- 计算机网络安全技术实验教程,网络安全实验教程
- Js获取屏幕宽度、高度 移动端H5适配
- 51单片机步进电机c语言程序,51单片机的步进电机c语言驱动程序
- 2021-08-01 武大账号访问知网
- 16部趣味数学纪录片
- 全球最顶级的十大创新公司
- 使用wbadmin备份整个网络上的完整Vista PC
- 汇编语言-jcxz指令
- linux文件系统lv是什么意思,Linux LVM系列(二)lv缩容