进程和线程,IO流,File相关知识点的整理

第十七天进程和线程--------

1.进程:

就是正在运行的程序,分配内存让应用程序能够运行。

Windows系统号称:多任务(可以同时运行多个应用程序)。

宏观上看:Windows确实是允许多个程序运行

微观:cpu快速的切换执行任务。

2.线程:

线程在一个进程中负责代码的执行,就是一个进程中的执行路径。

注意:

java程序在运行的时候,jvm会帮我们创建一个主线程来执行代码。主线程主要负责main方法中的代码执行。

一个java程序中至少有两条:

主线程;垃圾回收线程。

多线程:

在一个进程中,有多个线程同时执行不同的任务。

“同时”:单核cpu快速的切换多个线程执行。切换速度特别快。

好处:

1.一个进程中,解决一个线程中同时执行多个任务的问题。

2.提高资源的利用率

弊端:

1.增加cpu的负担。不是线程越多越好。

2.降低了一个进程中的执行概率。

3.容易引发线程安全问题。

4.容易出现死锁

Java中线程的创建方式:

线程的创建方式一:

1.定义一个类来继承Thread。

2.重写thread类中的run方法,把自定义线程的任务代码写在run方法中。

每一个线程都有都有自己的任务代码,jvm在创建的主线程的任务代码就是main方法。自定义的线程的任务就写在run方法中

3.创建Thread的子类,并且调用start方法开启线程。

线程的创建方式二:

1.自定义一个类实现接口Runnable,接口中就会提供一个run方法。

2.实现Runnable方法中的run方法。

3.创建Runnable接口的实现类对象

4.创建一个Thread对象,并把Runable实现类创建对象作为参数

5.调用Thread对象的start来开启线程

问题:为啥要将Runable接口实现类的做线作为参数传递

注意点:

一旦线程开启了,会默认执行对象中的run方法,但是千万不要自己直接调用run方法,这样调用就和调用普通方法一样 了。

线程中常用的方法:

Tread(String name);初始化线程的名字

getname();返回线程的名字

setName(String name);设置线程对象的名字

Sleep();线程的堵塞状态(睡眠时间是毫秒)

getpriority();       设置线程的优先级(默认是5)

currentThread();获取主线程

注意:

Run方法中的睡眠,是谁在执行,就睡眠谁。

Java给线程枷锁

方式一:同步代码块

Synchronized(锁对象){

}

在java中任意一个对象  都都会有一个对象状态,就可以通过对象的状态来作为锁i的一个标示符。

Statue = 0,表示锁是关闭的,= 1表示开启

同步代码块的使用的注意点:

1.任意对象都可以做锁的对象

2.如果你在同步代码块中调用了seelp方法,是不会释放锁对象的。

3.只有在真正存在线程安全的时候才需要使用同步代码块,否则会降低执行效率

4.多线程操作对象必须是唯一的,否则无效

出现线程安全的问题根本原因:

1.存在两个或两个以上的线程。并且线程之间共享着同一个资源。

2.多个语句操作了共享资源。

方式二:同步函数

同步函数是否有锁对象:有的

同步函数的使用注意点:

1.如果是非静态的函数,同步函数的锁就是调用方法的对象(但对象要唯一,如果不唯一,没有效果)

2.如果是一个静态函数,同步函数的锁对象是:当前函数所属类的字节文件(class对象)

3.同步函数的锁对象固定,不能够

自己指定。

推荐使用:同步代码快

原因:

1.同步代码块的对象可以由我们任意指定,同步函数是固定的。

2.同步代码快可以控制同步范围,同步函数必须是整个函数的所有代码都被同步

代码同步是可以解决线程安全问题

但是使用不当,会造成线程死锁问题。。。

A线程在等B线程完成,B线程在等A线程完成,一直在等,造成线程死锁。

线程死锁不一定会造成线程死锁,可能会出出现。

死锁现象的解决方案,没有,尽量避免。

线程的通讯:

一个线程完成自己的任务,去通知另一个线程开始另一个任务

Wait();等待  如果线程执行了wait方法,那麽该线程就会处于等待状态,等待状态的线程必须要通过其他线程来调用notify();方法唤醒。

notifyAll();

所有的在等待的线程。

wait() :等待需要等其他线程调用notify()来唤醒

线程会放到线程池中进行等待。

notify() :唤醒  随机唤醒线程池中的一个线程

notifyAll():唤醒所有等待线程。

wait方法和notify方法都是Object中的方法。

wait方法和notify只能由锁对象来调用。

wait方法和notify只能在同步线程中使用。

join方法  加入:可以在一个线程执行中,加入另外一个线程执行,前面的线程会等待加入的线程执行完毕后再执行。

线程的停止:

1.停止一个线程 一般是通过一个变量来控制

2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupture方法来完成。

interrupt();把等待的线程强制清除

notify();唤醒

守护线程(后台线程):在一个进程中只剩下守护线程,守护线程也会死掉

模拟文件下载:

一个线程默认不是守护线程。

demo2.setDaemon(true); // boolean : true表示这个线程为守护线程 ,false表示该线程为一般线程。

第十八天--------------

IO流:

(Input OutPut) 输入输出流 :

1.输入 : 将文件读到内存中

2.输出:将文件从内存输出到其他地方。

IO技术的作用 :

主要就是解决设备和设备之间的数据传输问题。比如:硬盘到---》内存  ,内存数据---》硬盘中   把键盘中的数据写入到内存。

IO的应用场景:

比如:打卡机到出信息表

比如:注册的时候图片的上传。

比如:下载功能

解析XML

数据保存到本地,数据一个永久保存。数据保存到磁盘上是以文件的形式存在的。所以现在学习文件的操作。

java中如何操作文件 :

java中是通过File文件类来操作文件和文件夹。

将U盘中的文件 拷贝到电脑中 :  输入流--->读到内存-->通过输出流读到电脑磁盘中。

学习文件类的构造方法:

File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。

File file = new File("D:\\a.txt");

File(File parent, String child)

根据parent抽象路径名和child路径名字符串创建一个新File实例。

File file1 = new File(parent, "a.txt");

File(String parent, String child)

根据parent路径名字符串和child路径名字符串创建一个新File实例。

File file2 = new File("D:"+File.separator, "a.txt");

java是跨平台的 不同的操作系统上都可以来运行

不同的系统目录的分隔符是不一样。

目录的分隔符:

在Windows系统上 目录分隔符 :\,但是Linux系统上的目录分隔符是/

注意点:在Windows上\或者/都可以作为目录的分隔符。 如果你用的反斜杠 目录分隔符就是\\如果使用/直接用/就可以分隔。

路径问题:

1.绝对路径:文件在硬盘上的完整路径。绝对路径一般都是以盘符开头D:\\a.txt绝对路径

2.相对路径:相对路径就是资源文件相对当前程序所在的路径

File中常用的方法:

创建:

CreateNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false

mkdir()在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。

mkdirs()在指定位置创建目录,这会创建路径中所有不存在的目录。

renameTo(File dest)重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。移动/重命名成功则返回true,失败则返回false。

删除:

delete()删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。

deleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除

判断方法:

exists()文件或文件夹是否存在。

isFile()是否是一个文件,如果不存在,则始终为false。

isDirectory()是否是一个目录,如果不存在,则始终为false。

isHidden()是否是一个隐藏的文件或是否是隐藏的目录。

isAbsolute()测试此抽象路径名是否为绝对路径名。

获取方法:

文件相关:

getName()获取文件或文件夹的名称,不包含上级路径。

getPath()返回绝对路径,可以是相对路径,但是目录要指定

getAbsolutePath()获取文件的绝对路径,与文件是否存在没关系

length()获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。

getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。

lastModified()获取最后一次被修改的时间。

文件夹相关:

staic File[] listRoots()列出所有的根目录(Window中就是所有系统的盘符)

list()返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。

list(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

listFiles()返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。

listFiles(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

第十九天--------------

Io流:作用:用于在设备于设备之间的数据传输

IO流:用于操作文件数据

IO流的分类:

1.字节流:读取的是文件的二进制数据,不会对二进制做处理。不会解析成看得懂的数据

2.字符流:读取的也是二进制数据,他会将二进制数据转换为我们能识别的字符(解码)。字符流是以字符为单位的

字符流=字节流+解码

流按照的方向:输入流和输出流。

判断流是输出还是输入:

是以当前的应用程序作为参考,观察数据是流入还是流出,如果是流入就是输入,如果是流出就是输出。

字节流

InputSream:此抽象类是表示  字节输入流和输出流所有类的父类。

如何判断一个流值字节输入流:

判断一下他的类名是否以InputStream结尾

使用FileInputStream:是InputStream的子类

字节输入流:

1.找到目标文件

File f = new file(路径);

2.建立:通到

FileInputSream f = new FileInputSream(f);

3.创建缓冲区[可有可无]

byte[] b = new byte byte[1024];

4.读取数据

5.关闭资源(释放资源)

字节输出流

OutputStream:她也是所有输出流的父类,也是一个抽象类,使用子类创建。

1.找到目标文件

File file = new File(path);

2.创建一个通到

FileOutputStream  out = new FileOutputStream();

3.创建一个缓冲区

4.关闭资源

注意事项:

1.如果写入的目标文件不存在,会自动创建一个目标文件。

2.如果目标文件存在,先将里面的数据清空,再写入数据。

3.如果目标文件存在,现要在原有的数据上面添加,那麽可以使用FileOutputStream(File file,boolean append)构造方法。

4.用write(int a);方法写数据,虽然接收的是int,实际上只有一个字节的数据,操作的低8位的字节,其他的全丢掉。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,505评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,138评论 11 349
  • 1 problem 找麻烦的,成问题的,惹乱子的 problem child 2 leave noun 准许,许可...
    Donutzpj阅读 311评论 0 0
  • (一) A想要实现文章日更,正在苦思冥想,同时,内心在纠结。 “写这个干什么,这么累,休息...
    让dream照进现实阅读 356评论 6 4