[javaSE] 练习队列线程和对象序列化

主要练习了队列数据结构,对象序列化和反序列化,多线程操作

import java.io.BufferedReader;
 java.io.File;
 java.io.FileInputStream;
 java.io.FileOutputStream;
 java.io.InputStream;
 java.io.InputStreamReader;
 java.io.ObjectInputStream;
 java.io.ObjectOutputStream;
 java.io.Serializable;

public class QueueThreadDemp {
    static StringQueue names;

    static void main(String[] args) throws Exception {
        names=getQueueObj();
        // 子线程循环队列
        new Thread(new Runnable() {
            @Override
            void run() {
                while (true) {
                    try {
                        Thread.sleep(5000);
                        names = QueueThreadDemp.getQueueObj();
                        System.out.println(names.toString());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

         读取键盘输入
        InputStream is = System.in;
        InputStreamReader isr =  InputStreamReader(is);
        BufferedReader br =  BufferedReader(isr);

        ) {
            String name = br.readLine();
            names.push(name);
            
            File file = new File("E:\\queue.txt");
            FileOutputStream fos =  FileOutputStream(file);
            ObjectOutputStream oos =  ObjectOutputStream(fos);
            oos.writeObject(names);
            oos.close();
            fos.close();
        }

    }

    static StringQueue getQueueObj()  Exception {
        File file = );
        if (file.exists() && file.length() > 0) {
            FileInputStream fis =  FileInputStream(file);
            ObjectInputStream ois =  ObjectInputStream(fis);
            names = (StringQueue) ois.readObject();
            ois.close();
            fis.close();
        } else {
            names = new StringQueue(5);
        }
        return names;
    }
}
数组队列
class StringQueue implements Serializable {
    private String[] mNames;
    private int index = 0;
    int nums;

    public StringQueue( nums) {
        mNames =  String[nums];
        this.nums = nums;
    }

     push(String name) {
        if (index >= nums) {
            pop();
        }
        mNames[index] = name;
        index++;
    }

     pop() {
        for (int i = 1; i < index; i++) {
            mNames[i - 1] = mNames[i];
        }
        index = index - 1public String toString() {
        String mes = "";
        for (String name : mNames) {
            mes += name + ",";
        }
         mes;
    }
}

效果:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


@ 注解能被用来为程序元素( 类、 方法、 成员变量等) 设置元数据。 值得指出的是, 注解不影响程序代码的执行, 无论增加、 删除注解, 代码都始终如一地执行。 如果希望让程序中的注解在运行时起一定
@ 1、线性表的概念 线性表是最常见也是最简单的一种数据结构。简言之, 线性表是n个数据元素的有限序列。 其一般描述为: A={a1,a2,……an) 一个数据元素通常包含多个数据项, 此时每个数据元
简介 ArrayList是开发中使用比较多的集合,它不是线程安全的,CopyOnWriteArrayList就是线程安全版本的ArrayList。CopyOnWriteArrayList同样是通过数组
在 Java String类源码阅读笔记 里学习了String类的源码,StringBuilder、StringBuffer是经常拿来和String类做对比的两个类,可谓是“爱恨纠缠” ,这里我们继续
话不多说,先上图。 1、基本概念 欲说线程,必先说进程。 进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进
@ 网络基础 计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。 那什么是互联网呢?互联网是网络的网络(internet
JVM是面试中必问的部分,本文通过思维导图以面向面试的角度整理JVM中不可不知的知识。 先上图: 1、JVM基本概念 1.1、JVM是什么 JVM 的全称是 「Java Virtual Machine
@ 本文基于jdk1.8 HashMap采用 key/value 存储结构,每个key对应唯一的value。 在jdk1.7之前,HashMap 的内部存储结构是数组+链表。 在jdk1.8中 Has
@ Eclipse是很多Java开发者的第一个开发工具,尽管开源的Eclipse在一后起之秀的对比下,显得有些颓势,但是,Eclipse有着丰富的插件支持。选择合适的插件,Eclipse表示:老夫也能
@ 准备 LinkedList是基于双向链表数据结构实现的Java集合(jdk1.8以前基于双向循环链表),在阅读源码之前,有必要简单了解一下链表。 先了解一下链表的概念:链表是由一系列非连续的节点组
@ 写博客哪有刷逼乎有意思 1 写博客哪有刷逼乎有意思 2 写博客哪有刷逼乎有意思 3 类的加载、 连接和初始化 系统可能在第一次使用某个类时加载该类, 也可能采用预加载机制来加载某个类。 JVM 和
树结构是一类重要的非线性数据结构。直观来看,树是以分支关系定义的层次结构。树结构在客观世界广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示。 树在计算机领域中也得到广泛应用,尤以二叉树最
@ 本文基于jdk1.8 String类可谓是我们开发中使用最多的一个类了。对于它的了解,仅仅限于API的了解是不够的,必须对它的源码进行一定的学习。 一、前置 String类是Java中非常特别的一
随便打开一个招聘网站,看看对高级Java工程师的技能要求。 抛开其它的经验能力等等,单纯从技术,或者说知识上来讲,可以发现一些共通的地方。 Java基础 计算机基础 数据库,SQL/NoSQL 常用开
@ JDBC指Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。 1、JDBC典型用法 1.1、JDBC 4.2 常用接口和类简介
简介 ArrayList是基于数组实现的一种列表。 ArrayList继承体系如下: 图一:ArrayList继承体系 ArrayList实现了List, RandomAccess, Cloneabl
@ Java 的 IO 通过 java.io 包下的类和接口来支持, 在 java.io 包下主要包括输入、 输出两种 10 流, 每种输入、 输出流又可分为字节流和字符流两大类。 其中字节流以字节为
@ 使用断言 断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。 断言的概念 假设确信某个属性符合要求, 并且代码的执行依赖于这个属性。例如, 需要计算:
@ Java 程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定功能。 Java 提供了 System 类和 Runtime 类来与程序的运行平台进行交互。 Syste
@ Java 提供了一个操作 Set 、 List 和 Map等集合的类:Collections , 该工具类里提供了大量方法对集合元素进行排序、 查询和修改等操作,还提供了将集合对象设置为不可变、对