一、序列化与反序列化

      把对象转换为字节序列的过程称为对象的序列化
  把字节序列恢复为对象的过程称为对象的反序列化
  对象的序列化主要有两种用途:
  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2) 在网络上传送对象的字节序列。

序列化关键代码如下:

定义Person类实现序列化。重写toString方法,定义无参以及带参构造

定义类

public class MySerialize {

    public static void main(String[] args) throws IOException {
OutputStream os=new FileOutputStream("save.bin");
ObjectOutputStream oos=new ObjectOutputStream(os); List<Person> list=new ArrayList<Person>();
Person p1=new Person("zs",12,"bj");
Person p2=new Person("hh",22,"ah");
Person p3=new Person("xixi",12,"hf"); list.add(p1);
list.add(p2);
list.add(p3); oos.writeObject(list); System.out.println("序列化成功!!!");
}
}

反序列化关键代码如下:

public class FSerialize {
public static void main(String[] args) throws Exception {
InputStream is=new FileInputStream("save.bin");
ObjectInputStream ois=new ObjectInputStream(is); List<Person> list=(List<Person>)ois.readObject();
for (Person person : list) { System.out.println(person);
} } }

运行效果:

二、多线程两种实现方式

①继承Thread

②实现Runnable

1、继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

package cn.b.happy;

public class MyThread extends Thread{
@Override
public void run() {
System.out.println("我是新线程!");
}
}
MyThread t1=new MyThread();
System.out.println(Thread.currentThread().getName());
t1.start();

2、如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:

package cn.b.happy;

public class ImplThread implements Runnable{

    @Override
public void run() { Thread.currentThread().setName("子线程2");
System.out.println("子线程");
System.out.println("我是子线程"); } }
 ImplThread t2=new ImplThread();
//为了启动ImplThread,需要首先实例化一个Thread,并传入自己的t2实例:
Thread tt=new Thread(t2);
tt.run();
System.out.println(Thread.currentThread().getName());
}

三、

join():暂停某个线程

setDaemon()后台线程,又称守护线程,两个线程交替执行,当一个线程结束时,另一个线程也结束

Sleep():使线程休眠,单位是毫秒

关键代码:

package cn.c.happy;

public class SleepThread extends Thread{
@Override
public void run() {
Thread.currentThread().setName("子线程");
for (int i = 1; i <=5; i++) {
/*try {
//休眠
Thread.sleep(3000);
} catch (InterruptedException e) { e.printStackTrace();
}*/
System.out.println("B"+i+"\t"+Thread.currentThread().getName());
}
}
}
package cn.c.happy;

public class Test {
public static void main(String[] args) throws InterruptedException {
SleepThread s1=new SleepThread();
s1.setDaemon(true);
s1.start();
//交替执行
for (int i = 1; i <=5; i++) {
if(i==3){
s1.join();// 调用join方法 执行完毕后再执行其他方法 }
System.out.println("A"+i+"\t"+Thread.currentThread().getName());
}
}
}

线程实现方式以及序列化 反序列化.java的更多相关文章

  1. Java序列化的几种方式以及序列化的作用

    Java序列化的几种方式以及序列化的作用 本文着重讲解一下Java序列化的相关内容. 如果对Java序列化感兴趣的同学可以研究一下. 一.Java序列化的作用    有的时候我们想要把一个Java对象 ...

  2. java Serializable和Externalizable序列化反序列化详解--转

    一.什么是序列化? “对象序列化”(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存 ...

  3. java序列化反序列化深入探究

    When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...

  4. java序列化反序列化深入探究(转)

    When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...

  5. java Serializable和Externalizable序列化反序列化详解(转载)

    一.什么是序列化? “对象序列化”(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存 ...

  6. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  7. Java多线程系列--“基础篇”09之 interrupt()和线程终止方式

    概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态” ...

  8. java多线程系类:基础篇:09之interrupt()和线程终止方式

    概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于"阻塞状态"的线程2.2 ...

  9. Java多线程学习总结--线程概述及创建线程的方式(1)

    在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...

随机推荐

  1. 原生JS:Object对象详细参考

    Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...

  2. 轻松掌握:JavaScript状态模式

    状态模式 状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类. 状态模式的使用场景也特别明确,有如下两点: 一个对象的行为取决于它的状态,并且它必须在运行 ...

  3. TOCControl上实现右键

    第一步:新建另外一个窗体 首先要定义一个全局变量 ILayer. 窗体要带参数,以便将 ILayer 传递过来. 获取属性列表. using System; using System.Collecti ...

  4. ABAP--在查询条件只包含部分索引字段时,如何使用索引

    One of the most important considerations when writing a select statement against a large table is th ...

  5. C# 操作PPt,去掉文本框的边框

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using OFFICECO ...

  6. 深入浅出-iOS程序性能优化 (转载)

    iOS应用是非常注重用户体验的,不光是要求界面设计合理美观,也要求各种UI的反应灵敏,我相信大家对那种一拖就卡卡卡的 TableView 应用没什么好印象. iOS应用是非常注重用户体验的,不光是要求 ...

  7. Android 利用内容提供者添加联系人的操作

    上文中<Android 获取系统的联系人>主要介绍了怎样获取系统联系人并实战了一下,本文将介绍如何添加一条联系人信息 添加联系人 1. 添加raw_contacts表,添加一条联系人的id ...

  8. 关于JNI的使用方法

    1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也 ...

  9. IOS设计模式-观察者模式

    前言:23种软件设计模式中的观察者模式,也是在软件开发中,挺常用的一种设计模式.而在苹果开发中,苹果Cocoa框架已经给我们实现了这个设 计模式,那就是通知和KVO(Key-Value Observi ...

  10. sql 如果关联表 没有值 设置 默认值

     SELECT *FROM ( SELECT t.task_name, t.status AS task_status, coalesce( r.task_ref_id, 999 ) AS task_ ...