• 线程实现方式以及序列化 反序列化.java


    一、序列化与反序列化

          把对象转换为字节序列的过程称为对象的序列化
      把字节序列恢复为对象的过程称为对象的反序列化
      对象的序列化主要有两种用途:
      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+"	"+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+"	"+Thread.currentThread().getName());
        }
    }
    }
  • 相关阅读:
    charindex使用一个异常记录思考
    真的有命运吗?
    《职道》序言:走向成功从职场细节开始
    迷人的笑容
    导致sql ce数据上传(采用push方法)不成功常见问题
    转篇文章,扫扫盲 《主流数据仓库产品对比分析》
    (转贴)JIRA安装和破解,随便看看吧
    Eclipse快捷键大全(转贴)
    没事在中移动MM商场做了2个应用,分别是运动专家和趣味闹钟
    免费实用微软系统工具集推荐(转)
  • 原文地址:https://www.cnblogs.com/WJ-163/p/5767892.html
Copyright © 2020-2023  润新知