线程

习题:

定义一个泛型类DAO<T>,在其中定义一个Map成员变量,Map的键为String类型,值为T类型
分别创建以下方法:
        1、public void save(String id,T entity):保存T类型的对象到Map成员变量中
        2、public T get(String id):从map中获取id对应的对象
        3、public void update(String id,T entity):替换map中key为id的内容,改为entity对象
        4、public List<T> list():返回map中存放的所有T对象
        5、public void delete(String id):删除指定id对象
    定义一个User类:
        该类包含:private成员变量(int类型) id,age;(String 类型) name。
        创建DAO类的对象,分别调用其save、get、update、list、delete方法来操作User对象,

//定义User类
public class User{
    private int id;
    private int age;
    private String name;
    //构造器,get,set,重写toString
}
public class DAO<T>{
    private Map<String,T> map = HashMap<>();
    public T get(String id){
        return map.get(id);
    }
    public void update(String id,T entity){
        map.put(id,entity);
    }
    //遍历map,将map的所有value(entity),封装到ArrayList返回即可
    public List<T> list(){
        //创建ArrayList
        List<T> List = new ArrayList<>();
        //遍历map
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            list.add(get(key));
        }
    }
    public void delete(String id){
        map.remove(id);
    }
    public void save(String id,T entity){
        map.put(id,entity);
    }
}

java事件处理机制:

java事件处理是采取”委派事件模型”。当事件发生时,产生时间的对象,会把此”信息”传递给”事件的监听者”处理,这里说的”信息”实际上就是java.awt.event事件类库里某个类所创建的对象,把它称为”事件的对象”。

事件源:

事件源是一个产生事件的对象,比如按钮,窗口等

事件:

事件就是承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件等等,会生成一个事件对象,该对象保存着当前时间很多信息,比如KeyEvent对象有含有被按下键的Code值。

java.awt.event包和javax.swing.event包中定义了各种事件类型

事件类型:

​ ActionEvent:通常在按下按钮,或双击一个列表项或选中某个菜单时发生

​ AdjustmentEvent:当操作一个滚动条时发生

​ ComponentEvent:当一个组件隐藏、移动、改变大小时发送

​ ContainerEvent:当一个组件从容器中加入或者删除时发生

​ FoucusEvent:当一个组件获得或是失去焦点时发生

​ ItemEvent:当一个复选框阔是列表被选中时,当一个选择框或选择菜单被选中

​ KeyEvent:当从键盘的按键被按下,松开时发生

​ MouseEvent:当鼠标被拖动,移动,点击,按下…

​ TextEvent:当文本框和文本域的文本发生改变时发生

​ WindowEvent:当一个窗口激活,关闭,失效,恢复,最小化

事件监听器接口:
  1. 当事件源产生一个事件,可以传送给事件监听者处理
  2. 事件监听者实际上就是一个类,该类实现了某个事件监听接口,比如MyPlane是一个类,实现了KeyListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理
  3. 事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口
  4. 这些接口在java.awt.event包和javax.swing.event包中定义。

程序进程线程:

  1. 单线程:同一个时刻,只允许执行一个进程

  2. 多线程:同一个时刻,可以执行多个线程,比如:一个qq进程,可以同时打开多个聊天窗口,一个迅雷进程,可以同时下载多个文件

  3. 并发:同一个时刻,多个任务交替执行,造成一种”貌似同时”的错觉,简单的说,单核CPU实现的多任务就是并发

  4. 并行:同一个时刻,多个任务同时执行。多核cpu可以实现并行

程序:
  • 为完成特定任务,用某种语言编写的一组指令的集合
进程:
  • 进程是指运行中的程序,比如使用qq,就是启动了一个进程,操作系统就会为该进程分配内存空间。比如使用迅雷,又启动了一个进程,操作系统将为迅雷分配刷新的内存空间
  • 进程是程序的一次执行过程,或是正在运行的一个程序。是动态的过程:有它自身的产生、存在和消亡的过程
线程:
  • 线程由进程创建的,是进程的一个实体
  • 一个进程可以有多个线程

线程基本使用:

在java中线程来使用有两种方法

  1. 继承Thread类,重写run方法
  2. 实现Runnable接口,重写run方法
案例1:
    1、编写程序,开启一个线程,该线程每隔1秒。在控制台输出"喵喵,我是小猫咪"
    2、对上题改进:当输出80次 喵喵,我是小猫咪 ,结束该进程
    3、使用JConsole监控线程执行情况,并画出程序示意图

    //1、当一个类继承了Thread类,该类就可以当作线程使用
    //2、我们会重写run方法,写上自己的业务代码
    //3、run Thread类 实现了Runnable 接口的run方法
    /*
        @Override
        public void run(){
            if(target != null){
                target.run();
            }
        }       
    */
    class Cat extends Thread{
        int times = 0;
        @Override
        public void run(){  //重写run方法,写上自己的业务逻辑
            whlie(true){
                System.out.print("喵喵,我是小猫咪" + (++times));
                //使用try-catch包住
                Thread.sleep(1000);
                //使用try-catch包住
                if (times == 80) {
                    break;//当times 到80,退出while,这时线程也就退出
                }
            }
        }
    }

    public static void main(String[] args) {
        //创造Cat对象,可以当作线程使用
        Cat cat = new Cat();
        cat.start();    //启动线程
    }
Runnable创建线程:
  1. java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时再用继承Thread类方法来创建线程显然是不可能了
  2. java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程
例子:
        编写程序,可以每隔1秒,在控制台输出"hi!",当输出10次后,自动退出。
        使用实现Runnable接口的方式实现,这里是静态代理
        -----------------------------------------------
        class Dog extends Runnable{ //通过实现Runnable接口,实现开发线程
            int count = 0;
            @Override
            public void run(){  //重写run方法,写上自己的业务逻辑
                whlie(true){
                    System.out.print("小狗汪汪叫~hi" + (++count) + Thread.currentThread().getName());
                    //使用try-catch包住
                    Thread.sleep(1000);
                    //使用try-catch包住
                    if (count == 10) {
                        break;//当count 到10,退出while,这时线程也就退出
                    }
                }
            }
        }

        public static void main(String[] args) {
            Dog dog = new Dog();
            //dog.start();  这里不能调用start
            //创建了Thread对象,把dog对象(实现Runnable),放入Thread
            Thread thread = new Thread(dog);
            thread.start();
        }
创作不易!转载请注明作者及文章链接或作者博客链接——
- 作者:pidanxia
- 链接:https://pidanxia.ink
(链接可为:**文章链接**或者**作者博客链接**)
暂无评论

发送评论 编辑评论


				
上一篇
下一篇