您的位置:首页 > 其它

2015.8.04(多线程、反射)

2015-08-04 20:03 267 查看

【目录】

线程

实现线程

死锁

反射

注解

多线程:

在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();
    }
}





死锁




反射

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();
        } 
    }
}


动态展示反射案例:




注解

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: