线程:程序中单独顺序的控制流,线程本身依靠程序进行运行,线程是程序中的顺序控制流,只能使用分配给程序的资源和环境。
进程:执行中的程序,一个进程可以包含一个或多个线程,一个进程至少要包含一个线程。
单线程:程序中只存在一个线程,实际上主方法就是一个主线程。
多线程:多线程是在一个程序中运行多个任务,多线程的目的是更好的使用CPU资源。
实现线程的两种方法:
- 继承Thread类
- 实现Runnable接口
常用的方法:
start()
:线程的启动;
currentThread()
:获取当前执行的线程对象;
getName()
:获取线程对象的名称;
sleep()
:线程休眠(int类型,单位ms);
yield()
:线程礼让,可实现对线程执行的顺序的控制;
setPriority
:设置线程的优先级MIN_PRIORITY(1)
、NORM_PRIORITY(5)
、MAX_PRIORITY(10)
(实际运行时并不严格按照优先级执行);
wait()
:进程等待;
suspend()
:进程挂起;
resume()
:进程回复挂起。
同步与死锁
进程同步:在多道程序中,进程是并发执行的,不同进程之间存在着不同的制约关系。
进程间的制约关系:
(1)、资源共享;
(2)、相互合作。
产生死锁的必要条件:
(1)互斥条件;
(2)不可剥夺条件;
(3)请求且等待条件;
(4)循环等待条件。
XML
XML,即可拓展标记语言(Extensive Markup
Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网数据的传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
XML与HTML 的区别:
XML被设计为传输和存储数据,其焦点是数据的内容;
HTML被设计用来显示数据,其焦点是数据的外观;
HTML旨在显示信息,而XML旨在传输信息。
Json数据格式
JSON:JavaScript对象表示法(JavaScript Object Notation)
JSON是轻量级的文本数据交换格式、独立于语言和平台、具有自我描述性。它基于JavaScript的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++,C#, Java, JavaScript, Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
JSON 可以将 JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript很容易解释它,而且 JSON 可以表示比”名称 /值对”更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
JSON的两种数据结构:
1、“键/值”对的集合。不同的语言中,它被理解为对象,记录,结构,字典,哈希表,邮件列表,或者关联数组。
2、值的有序列表。在大部分语言中,它被理解为数组。
Tip:transient
Java语言的关键字,变量修饰符,如果transient声明一个实例变量,当对象存储时,它的值不需要维持。换句换说就是。用transient关键字标记的成员变量不参与序列化过程。
关于序列化:
目的:为了保存咋以内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种的方法来保存Object
States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。用处:将内存中的对象保存到一个文件中或者数据库中、使用套接字在网络上传送对象、通过RMI传输对象。
序列化过程:
在没有序列化之前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量;如下
Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);
当通过下面的代码序列化之后,对象中的width和height实例变量的值都被保存到foo.ser文件中,这样以后又可以把它从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对象。
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);
注:
- 当父类实现序列化,子类自动实现序列化,不需要显示实现Serializable接口
- 当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化
- 并非所有对象都可以序列化。