Java学习笔记 线程,注解(注释)...
来源:互联网 发布:淘宝人脸认证为何失败 编辑:程序博客网 时间:2024/06/06 08:50
笔记
Annotation
// 创建config.properties文件// 文件中存放的内容person=com.linj.thread.Student// 自定义注解import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)// 注释的范围@Target(ElementType.FIELD) // 注释的类型public @interface StudentAnnotation { int value(); // 注释一个int值}// 注解工厂import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Properties;public class Factory { public static Person creatPerson() { Person person = null; Properties p = new Properties(); try { p.load(new FileInputStream("config.properties")); String clazzName = p.getProperty("person"); Class clazz = Class.forName(clazzName); person = (Person) clazz.newInstance(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return person; }}// 在一个类中import java.lang.reflect.Field;public class Student extends Person{ @StudentAnnotation(18) private int age; private String name; public String clazz; public Student() { // 得到student类的Class的对象,this指test中的Student对象zhangsan Class clazz = this.getClass(); try { Field field = clazz.getDeclaredField("age"); StudentAnnotation sa = field.getAnnotation(StudentAnnotation.class); // 得到age属性的StudentAnnotation注解,如果没有返回null if(sa != null) { int i = sa.value(); field.setAccessible(true); field.set(this, i); field.setAccessible(false); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 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; } public int getAge() { return age; } @Override public void sleep() { System.out.println("困"); }}
多线程
// 火车票售票,线程同步,安全问题public class TestThread implements Runnable{ int count = 120; public synchronized void doIt() { if(count > 0) { try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "车票剩余" + --count); } } @Override public void run() { while (true) { doIt(); } } public static void main(String[] args) { TestThread t = new TestThread(); Thread tA = new Thread(t,"1"); Thread tB = new Thread(t,"2"); Thread tC = new Thread(t,"3"); Thread tD = new Thread(t,"4"); Thread tE = new Thread(t,"5"); Thread tF = new Thread(t,"6"); tA.start(); try { tB.join(); tB.start(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }// tB.start();// tC.start();// tD.start();// tE.start();// tF.start(); }}// 两个线程锁死的情况public class MyRunnable1 implements Runnable{ String lock1 = "a"; String lock2 = "b"; @Override public void run() { synchronized (lock1) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("等lock2"); synchronized (lock2) { System.out.println("我要走了"); } } }public class MyRunnable2 implements Runnable{ String lock1 = "a"; String lock2 = "b"; @Override public void run() { synchronized (lock2) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("等lock1"); synchronized (lock1) { System.out.println("我要走了"); } } }}// 测试类部分代码MyRunnable1 r1= new MyRunnable1(); MyRunnable2 r2= new MyRunnable2(); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start();// 银行取款public class BankTest implements Runnable{ int money = 1000; public synchronized void getMoney() { if(money >= 100) { try { Thread.sleep(50); System.out.println(Thread.currentThread().getName() + "取款100 \n余额:" + (money -= 100)); } catch (InterruptedException e) { e.printStackTrace(); } } } @Override public void run() { while(true) { getMoney(); } } public static void main(String[] args) { BankTest t = new BankTest(); Thread a = new Thread(t,"a"); Thread b = new Thread(t,"b"); a.start(); b.start(); }}
总结
来日再见当初的浅薄,学习需要认真和积累
0 0
- Java学习笔记 线程,注解(注释)...
- Java学习笔记-注释
- Java 注解学习笔记
- Java 注解学习笔记
- java注解学习笔记
- java注解学习笔记
- java注解学习笔记
- java 注解学习笔记
- java 元注释学习笔记
- 浅谈Java线程学习(注释心得)
- 【转】Java 注解学习笔记
- 慕课网 Java注解 学习笔记
- java学习笔记 元注解
- Java基础 注解 学习笔记
- Java学习笔记之注解
- Java注释与注解
- java线程学习笔记
- java线程学习笔记
- hdu5344MZL's xor
- Android之——杀死用户选中的进程优化
- 深入剖析Android四大组件(七)——Activity启动的4个阶段
- FZU 2183 简单题(字符串匹配|字符串压缩)(简单)
- JAVA基础一大堆0804反射+注解
- Java学习笔记 线程,注解(注释)...
- 乘法逆元 & hdu 1576 A/B
- shape(二)
- ocp知识点:控制事务
- 1026. Table Tennis (30)
- 利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件
- Java方法中的参数传递方式
- linux oracle修改最大连接数
- HDU 3729 I'm Telling the Truth