7.14~7.15学习总结

Java的前置知识学习时间截至了,慌的一批~~。

看看自己学的,再看看要求学的,简直:

 现在继续:IO流里面的Commons_IO的用法:

public class Main
{public static void main(String[]args) throws IOException {long len= FileUtils.sizeOf(new File("小花花"));System.out.println(len);len=FileUtils.sizeOf(new File("dest"));System.out.println(len);Collection<File>files=FileUtils.listFiles(new File("dest"), EmptyFileFilter.NOT_EMPTY,null);//第一个参数文件,第二个参数是过滤器,这里的意思是将空的过滤,只留下非空的,第三个参数for(File f:files){System.out.println(f.getAbsolutePath());}//默认是一层子集,如果要操作子孙集,可以使用第三个参数;System.out.println("---------------");Collection<File>files2=FileUtils.listFiles(new File("C:\\Users\\zplaz\\IdeaProjects\\xiaohuahua\\src"),EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);for(File ff:files2){System.out.println(ff.getAbsolutePath());}//如果想要让只是后缀为。Java的文件出现在列出来:Collection<File>files3=FileUtils.listFiles(new File("C:\\Users\\zplaz\\IdeaProjects\\xiaohuahua\\src"),new SuffixFileFilter("java"), DirectoryFileFilter.INSTANCE);for(File ff:files3){System.out.println(ff.getAbsolutePath());}//如果是想要两个都有的话或者都可以的话可以用// FileFilterUtils.or();//FileFilterUtils.and();将其作为两个参数//读取文件String msg=FileUtils.readFileToString(new File("小花花"),"UTF-8");System.out.println(msg);byte[]datas=FileUtils.readFileToByteArray(new File("小花花"));System.out.println(datas.length);//逐行读取List<String>msgs=FileUtils.readLines(new File("小花花"),"UTF-8");for(String string:msgs){System.out.println(string);}//迭代器逐行读取LineIterator it=FileUtils.lineIterator(new File("小花花"),"UTF-8");while(it.hasNext()){System.out.println(it.nextLine());}//写出文件FileUtils.write(new File("小花花三"),"小麻子说她真的很喜欢小饺子,难怪小饺子总是打喷嚏","UTF-8",true);//FileUtils.writeStringToFile();和上面的一样使用FileUtils.writeByteArrayToFile(new File("小花花4"),"累瘫了,但是好快乐".getBytes("UTF-8"),true);//使用字节数组打印出来//写出列表List<String>datass=new ArrayList<String>();datass.add("小花花");datass.add("泥巴巴");datass.add("所以说,小麻子是小花花,小饺子是她爸爸");FileUtils.writeLines(new File("小花花"),datass,/*条目间隔符*/"。。。。",true);}
}

创建线程方式1:

创建一个类继承Tread,并且创建该对象, 用对象调用start()开启多线程;

public class Main extends Thread
{//run方法是线程的入口点;@Overridepublic void run() {for(int i=0;i<20;i++){System.out.println("一边敲代码");}}public static void main(String[]args){//启动线程Main  st=new Main();st.start();//start方法由cpu调用不保证立即运行for(int i=0;i<20;i++){System.out.println("一边听歌");}}
}
/*
结果:
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边敲代码
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边听歌
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码
一边敲代码*/

创建方式二:

public class StartRun implements Thread
{public void run(){for(int i=0;i<20;i++){ System.out.println("一边听歌");}}public void main(String[]args){/*StartRun st=new StartRun();Thread t=new Thread(st);t.start();*/new Thread(new StartRun()).start();//可以使用匿名for(int i=0;i<20;i++){System.out.println("一边coding");}}
}

Runnable接口的run方法是不可以抛出异常,且run方法的返回值为空,但是Callable中的call方法可以抛出异常,并且有返回值;Callable比Runnnable好用一些,但是也麻烦一些,流程如下:

1.创建执行服务:

2.提交执行

3.获取结果

4.关闭服务·;

总结:创建线程总共有三种方式:常用的两种,(继承thread类,重写Runnble接口,guc并发包,实现Callable接口);

Lambda表达式:

如果一个接口的实现类里面只有一个方法,且这个方法就只实现一次,那么这个接口的实现类可以简化为

接口类 变量=(方法形参参数没有类型修饰,如果只有一个参数,括号可以省略)->
{
//如果只有一行代码,花括号可以省略
被重写的方法体
//如果函数体里面总共就一个语句,还是返回语句,可以连return都省略
}
//这样就可以将方法实现类放在这一小坨代码

直接写在要被应用的地方;这里来一个多线程的例子:

public class LambdaTest01 {public static void main(String[] args) {new Thread(() ->{System.out.println("一边学习");}).start();new Thread(() -> System.out.println("小麻子说超级喜欢小饺子")).start();System.out.println("一边想做小麻子爸爸");}
}/*//结果:
一边学习
一边想做小麻子爸爸
小麻子说超级喜欢小饺子*/

线程状态:新生状态,就绪状态,运行状态,死亡状态,阻塞状态之后不能立刻进行运行状态,而是要先进入就绪状态,当线程进入死亡状态后,不可以在新生,除非开启一个新的线程;

 一般停止线程不要用stop方法,不安全

Sleep,yield:第一个让线程由运行状态到阻塞状态,再由阻塞状态到就绪状态;第二个直接由运行状态跳回就绪状态;第二个让cpu直接重新调度;

//礼让
public class yield {public static void main(String[]args){new Thread(()->{for(int i=0;i<100;i++){System.out.println("小麻子爱吃草线程"+i);}}).start();for(int i=0;i<100;i++){if(i%20==0)Thread.yield();System.out.println("main"+i);}}}

join插队:

join是成员方法,join写在哪个方法里面那个方法就被阻塞了,必须达到相应的条件执行完才可以执行后面的,但是如果传入一个时间的话,时间到了cpu就会重新调度,不会再管这个阻塞了

public class Join {public static void main(String[]args) throws InterruptedException {Thread t=new Thread(()->{for(int i=0;i<100;i++){System.out.println("线程方法"+i);}});t.start();for(int i=0;i<100;i++){if(i==20)t.join();//主方法必须等i==20之后才可以继续执行System.out.println("main方法"+i);}}}
/*
main方法0
main方法1
main方法2
main方法3
main方法4
main方法5
main方法6
main方法7
main方法8
main方法9
main方法10
main方法11
main方法12
main方法13
main方法14
main方法15
main方法16
main方法17
main方法18
main方法19
线程方法0
线程方法1
线程方法2
线程方法3
线程方法4
线程方法5
线程方法6
线程方法7
线程方法8
线程方法9
线程方法10
线程方法11
线程方法12
线程方法13
线程方法14
线程方法15
线程方法16
线程方法17
线程方法18
线程方法19
线程方法20
线程方法21
线程方法22
线程方法23
线程方法24
线程方法25
线程方法26
线程方法27
线程方法28
线程方法29
线程方法30
线程方法31
线程方法32
线程方法33
线程方法34
线程方法35
线程方法36
线程方法37
线程方法38
线程方法39
线程方法40
线程方法41
线程方法42
线程方法43
线程方法44
线程方法45
线程方法46
线程方法47
线程方法48
线程方法49
线程方法50
线程方法51
线程方法52
线程方法53
线程方法54
线程方法55
线程方法56
线程方法57
线程方法58
线程方法59
线程方法60
线程方法61
线程方法62
线程方法63
线程方法64
线程方法65
线程方法66
线程方法67
线程方法68
线程方法69
线程方法70
线程方法71
线程方法72
线程方法73
线程方法74
线程方法75
线程方法76
线程方法77
线程方法78
线程方法79
线程方法80
线程方法81
线程方法82
线程方法83
线程方法84
线程方法85
线程方法86
线程方法87
线程方法88
线程方法89
线程方法90
线程方法91
线程方法92
线程方法93
线程方法94
线程方法95
线程方法96
线程方法97
线程方法98
线程方法99
main方法20
main方法21
main方法22
main方法23
main方法24
main方法25
main方法26
main方法27
main方法28
main方法29
main方法30
main方法31
main方法32
main方法33
main方法34
main方法35
main方法36
main方法37
main方法38
main方法39
main方法40
main方法41
main方法42
main方法43
main方法44
main方法45
main方法46
main方法47
main方法48
main方法49
main方法50
main方法51
main方法52
main方法53
main方法54
main方法55
main方法56
main方法57
main方法58
main方法59
main方法60
main方法61
main方法62
main方法63
main方法64
main方法65
main方法66
main方法67
main方法68
main方法69
main方法70
main方法71
main方法72
main方法73
main方法74
main方法75
main方法76
main方法77
main方法78
main方法79
main方法80
main方法81
main方法82
main方法83
main方法84
main方法85
main方法86
main方法87
main方法88
main方法89
main方法90
main方法91
main方法92
main方法93
main方法94
main方法95
main方法96
main方法97
main方法98
main方法99
*/

观察线程的状态:

public class AllState {public static void main(String[]args) throws InterruptedException {Thread t=new Thread(()->{for(int i=0;i<5;i++){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("小麻子");});Thread.State state=t.getState();System.out.println(state);t.start();state=t.getState();System.out.println(state);while(state!=Thread.State.TERMINATED){Thread.sleep(200);state=t.getState();System.out.println(state);}state=t.getState();System.out.println(state);}
}
/*
NEW
RUNNABLE
TIMED_WAITING
TIMED_WAITING
小麻子
TERMINATED
TERMINATED*/

线程的优先级,优先级要在start方法之前,而且优先级高的有大概率先执行,但是不一定先执行;

守护线程:

/*
守护线程是为用户线程服务的,jvm不用等待守护线程执行完毕;
默认线程都是用户线程,jvm等待所有用户线程执行完毕,否则不h会停止*/public class daemonTest {public static void main(String[]args){God god=new God();You1 you1=new You1();Thread t=new Thread(god);t.setDaemon(true);//将用户线程改为守护线程t.start();new Thread(you1).start();}}
class You1 extends Thread
{public void run(){for(int i=0;i<=365*100;i++){System.out.println("开心每一天");}System.out.println("oooo...");}
}
class God extends Thread
{public void run(){for(int i=0;i<=365*1000;i++){System.out.println("bless you");}System.out.println("ooooo....");}
}

并发:同一个对象对多个线程同时操作;

将一个大的方法加上synchronized会大大影响效率;sychronized锁的是对象和类;当这个修饰方法的时候,成员方法修饰的是资源,如果锁错了就凉凉还是会谢;同步化块:synchronized(obj)同步化块目标更明确,可以锁不变的对象。

/*** 线程安全,在并发时保证数据的正确性,效率尽可能高*/public class safeTest {public static void main(String[]args){Account account=new Account(100,"结婚礼金");SynDrawing you=new SynDrawing(account,80,"可悲的你");SynDrawing wife=new SynDrawing(account,90,"happy的他");you.start();wife.start();}
}
class SynDrawing extends Thread
{Account account;int drawingMoney;int packetTotal;public SynDrawing( Account account, int drawingMoney,String name) {super(name);this.account = account;this.drawingMoney = drawingMoney;}@Overridepublic void run() {try {test();} catch (InterruptedException e) {e.printStackTrace();}}public void test() throws InterruptedException {if(account.money<=0)return;synchronized(account){if(account.money-drawingMoney<0)return ;Thread.sleep(1000);account.money-=drawingMoney;packetTotal+=drawingMoney;System.out.println(this.getName()+"-->账户余额为"+account.money);System.out.println(this.getName()+"-->口袋里的钱为"+packetTotal);}}
}
class Account
{int money;String name;public Account(int monney, String name) {this.money = monney;this.name = name;}
}/*
可悲的你-->账户余额为20
可悲的你-->口袋里的钱为80*/

并发编程操作容器的时候都可以想到并发容器:将容器类型替换为

 这里以List为例;

在一个同步块中如果有两个及以的所的时候可能会发生死锁;解决:避免锁套锁

时间类:

public class Others {public static void main(String[]args){Timer timer=new Timer();//执行安排Calendar cal=new GregorianCalendar(2099,12,31,53,54);timer.schedule(new MyTask(),cal.getTime(),200);//指定时间第二个参数,第一次执行的时间是,第三个参数是每过200毫秒执行一次1}}//任务类
class MyTask extends TimerTask
{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("放空大脑");}System.out.println("--------end------");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】多线程编程三(std::mutexstd::mutex、std::lock_guard、std::unique_lock详解)

目录 一、线程间共享数据 1.数据共享和条件竞争 2.避免恶性条件竞争 二、用互斥量来保护共享数据 1. 互斥量机制 2.mutex头文件介绍 三、C中使用互斥量mutex 1. 互斥量mutex使用 2.mutex类成员函数 ① 构造函数 ② lock() ③ unlock() ④ try_lock() 四、使用std::…

如何与ChatGPT愉快地聊天

原文链接&#xff1a;https://mp.weixin.qq.com/s/ui-O4CnT_W51_zqW4krtcQ 人工智能的发展已经走到了一个新的阶段&#xff0c;在这个阶段&#xff0c;人工智能可以像人一样与我们进行深度的文本交互。其中&#xff0c;OpenAI的ChatGPT是一个具有代表性的模型。然而&#xff0…

mac安装Golang开发环境及快速入门

目录 一、Mac brew 安装go环境 1.1 安装步骤 1.2 设置GOPATH 及环境变量 1.3 编写第一个go程序 二、快速入门 2.1 快速入门需求 2.2 go学习&#xff08;自用&#xff09; 2.2.1 go基础程序 2.2.2 变量声明 2.2.3 常量和枚举 2.2.4 函数与多种返回值 2.2.5 init函数…

18.Lucas-Kanade光流及OpenCV中的calcOpticalFlowPyrLK

文章目录 光流法介绍OpenCV中calcOpticalFlowPyrLK函数补充reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 光流法介绍 光流描述了像素在图像中的运动&#xff0c;就像彗星☄划过天空中流动图像。同一个像素&#xff0c;随着时…

手写对象浅比较(React中pureComponent和Component区别)

PureComponent和Component的区别 PureComponent会给类组件默认加一个shouldComponentUpdate这样的周期函数 //PureComponent类似自动加了这段shouldComponentUpdate(nextProps,nextState){let { props, state } this;// props/state:修改之前的属性状态// nextProps/nextState…

047、TiDB特性_TopSQL

TopSQL 之前 之前没有办法找单个TiKV Server的语句。只能查找整个集群的慢语句。 TopSQL之后 指定TiDB及TiKV实例正在执行的SQL语句CPU开销最多的Top 5 SQL每秒请求数、平均延迟等信息 TopSQL 使用 选择需要观察负载的具体TiDB Server或TiKV实例 观察Top 5 类SQL 查看某…

用IDEA写第一个Spring程序 HelloWorld

用IDEA写第一个Spring程序 HelloWorld 环境 Orcal JDK&#xff1a;1.8.0_341 maven&#xff1a;3.9.3 Spring&#xff1a;5.3.10 IDEA&#xff1a;2023.1.2 1. 安装JDK和IDEA 2. 安装maven并配置环境变量、换源 3. IDEA中maven属性配置&#xff0c;主要是版本和settings文件及…

python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试&#xff0c;手动测试大家再熟悉不过了&#xff0c;那如何进行自动化登录测试呢&#xff01;本文就基于pythonselenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试&#xff0c;可提供点参考&#xff01;下面就包括测试代…

centos7 docker 安装sql server 2019

contos7安装sql server docker最低1.8或更高 卸载旧的docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 装docker依赖包 #安装所需资源包 sudo yum install -…

uniapp实现微信小程序自带的分享功能

定义 share.js 文件 export default {data() {return {// 默认的全局分享内容share: {title: 标题,path: /pages/index/index, // 全局分享的路径imageUrl: , // 全局分享的图片(可本地可网络)}}},// 定义全局分享// 1.发送给朋友onShareAppMessage(res) {return {title: this…

数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)

目录 引例 希尔增量序列 原始希尔排序 代码&#xff08;C语言&#xff09; 时间复杂度 更多增量序列 Hibbard增量序列 Sedgewick增量序列 希尔排序&#xff08;by Donald Shell&#xff09; 引例 给以下序列进行排序&#xff1a; 先以5的间隔进行插入排序&#xff1a…

设计模式之桥接模式

写在前面 本文看下桥接设计模式。 1&#xff1a;介绍 1.1&#xff1a;什么时候桥接设计模式 当一个业务场景由多个变化维度组成&#xff0c;并且这多个变化的维度到底有多少种情况是不确定&#xff0c;比如现在我们要为瑞幸咖啡写一个系统&#xff0c;很自然的&#xff0c;…

2023.7.16 第五十九次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

Element分页组件自定义样式

样式效果 页面代码 <el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"page.page":page-sizes"[10, 20, 30, 40]":page-size"page.size"layout"total, sizes, prev, …

如何用https协议支持小程序

步骤一&#xff1a;下载SSL证书 登录数字证书管理服务控制台。在左侧导航栏&#xff0c;单击SSL 证书。在SSL证书页面&#xff0c;定位到目标证书&#xff0c;在操作列&#xff0c;单击下载。 在服务器类型为Nginx的操作列&#xff0c;单击下载。 解压缩已下载的SSL证书压缩…

使用 jmeter 进行审批类接口并发测试

目录 前言&#xff1a; 背景&#xff1a; 难点&#xff1a; 场景 a&#xff1a; 场景 b&#xff1a; 前言&#xff1a; 使用JMeter进行审批类接口的并发测试是一种有效的方法&#xff0c;可以模拟多个用户同时对接口进行审批操作&#xff0c;以评估系统在高负载情况下的性…

Java+Vue+Uniapp全端WMS仓库管理系统

详情图片为运行截图,功能列表: 1、数据管理:物料数据管理、物料Bom管理、物料组管理、物料分类管理、供应商管理、仓库管理、货位管理、车间管理 2、采购管理:物料标签管理、入库单管理、入库退货管理 3、质检管理:质检单管理(包括单据号、单据类型、创建时间、检验状态…

4. CSS用户界面样式

4.1什么是界面样式 所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。 ●更改用户的鼠标样式 ●表单轮廓 ●防止表单域拖拽 4.2鼠标样式cursor li {cursor: pointer; }设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。 4.3轮廓线outline…

排序算法第三辑——交换排序

目录 ​编辑 一&#xff0c;交换排序算法的简介 二&#xff0c;冒泡排序 冒泡排序代码&#xff1a;排升序 三&#xff0c;快速排序 1.霍尔大佬写的快速排序 2.挖坑法 3.前后指针法 四&#xff0c;以上代码的缺陷与改正方法 三数取中 三路划分&#xff1a; 五&#…

【电子学会】2023年05月图形化四级 -- 计算圆的面积和周长

计算圆的面积和周长 编写程序计算圆的面积和周长。输入圆的半径&#xff0c;程序计算出圆的面积和周长&#xff0c;圆的面积等于3.14*半径*半径&#xff1b;圆的周长等于2*3.14*半径。 1. 准备工作 &#xff08;1&#xff09;保留舞台中的小猫角色和白色背景&#xff1b; 2…