多线程、反射

来源:互联网 发布:网络兼职招聘 编辑:程序博客网 时间:2024/06/14 20:00

【目录】

线程
实现线程
死锁
反射
注解

多线程:

在Java思想中,将并发完成的每一件事情称为线程。java语言提供了并发机制,程序猿可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发执行,这种机制称为多线程。
这里写图片描述

一个简单的线程代码

package com.day08.thread;public class MyThread extends Thread {    @Override    public void run() {    System.out.println("路漫漫其修远今,吾将上下而求索。");    }}package com.day08.thread;public class Test {    public static void main(String[] args) {        //java的主线程       MyThread my = new MyThread();       System.out.println("线程开始执行");       my.start();//在进程中申请独立的运行空间       System.out.println("线程结束执行");    }}

优势:
系统空转时间减少
共享内存
多个任务同时进行
and so on……

实现多线程的两种方式:

1、继承java.lang.Thread类

public class MyThread extends Thread {    public MyThread() {    }    public MyThread(String name) {        super(name);    }    private static int ticket = 100;//注意将ticket装成静态的才能共享!    private String lock = "asd";    @Override    public void run() {        while (ticket > 0) {            synchronized (lock) {                if (ticket > 0) {                    System.out.println(getName() + "卖出了第" + ticket + "张票");                    ticket--;                }            }            try {                Thread.sleep(50);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}public class Test {    public static void main(String[] args) {         MyThread m1 = new MyThread("售票员1");         MyThread m2 = new MyThread("售票员2");         MyThread m3 = new MyThread("售票员3");         MyThread m4 = new MyThread("售票员4");         m1.start();         m2.start();         m3.start();         m4.start();

2、实现java.lang.Runnable接口

public class MyRunnable implements Runnable {    private int ticket = 100;    private String s = "lock";// 定义一个锁    @Override    public void run() {        while (ticket > 0) {            synchronized (s) {// 设置锁                if (ticket > 0) {//进来一个,上锁,其它的等待。                    //当最后一张卖出,还有要进来的 所以判断票数                    System.out.println(Thread.currentThread().getName() + "卖出了票号" + ticket);                    ticket--;                }            }            try {                Thread.sleep(500);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}public class Test {    public static void main(String[] args) {        MyRunnable runnable = new MyRunnable();        Thread m1 = new Thread(runnable, "售票员1");        Thread m2 = new Thread(runnable, "售票员2");        Thread m3 = new Thread(runnable, "售票员3");        Thread m4 = new Thread(runnable, "售票员4");        m2.setPriority(9);//优先级,在这里让m2优先售票        m1.start();        m2.start();        m3.start();        m4.start();    }}

这里是较为详细的地址【http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html】

这里写图片描述

死锁

这里写图片描述

反射

Student类

public class Student {     private int age;     private String name;     private String clazz;    public int getAge() {        return age;    }//  public void setAge(int age) {//      this.age = age;//  }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getClazz() {        return clazz;    }    public void setClazz(String clazz) {        this.clazz = clazz;    }}import java.lang.reflect.Field;public class Test {    public static void main(String[] args) {        Class<Student> clazz = Student.class;//      //Field[] fields = clazz.getFields();// 以数组形式返回所有公共属性//      Field[] fields = clazz.getDeclaredFields();//以数组形式返回所有属性//      for (Field fie : fields) {//          System.out.println(fie.getName());// 返回属性名称//          System.out.println(fie.getType().getName());// 返回属性的类型名称//          System.out.println(fie.getModifiers());// 反悔属性修饰符的整数形式//      }        Student zhangsan = new Student();        try {            Field age = clazz.getDeclaredField("age");//得到指定名称的属性AGE            age.setAccessible(true);//取消java访问修饰符检查            age.set(zhangsan, 18);//更改对象zhangsan的age属性为18            age.setAccessible(false);//取消检查            System.out.println(zhangsan.getAge());//输出对象zhangsan的age值        } catch (NoSuchFieldException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }     }}

动态展示反射案例:

这里写图片描述

注解

这里写图片描述

0 0
原创粉丝点击