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(); } } }
动态展示反射案例:
注解
相关文章推荐
- C语言编程入门——综合练习(二)
- Feature Engineering versus Feature Extraction: Game On!
- 整数的唯一分解定理【模板】
- HDU 5344 MZL's xorti
- hdu5351(2015多校5)--MZL's Border(打表,,找规律)
- windows获取其他程序窗口的内容
- opencv学习(三)书本《学习Opencv》(中文版)第四章的样例Ex4-1(opencv3.0.0+VS2012+win7)
- Objective-C学习-字典类型 NSDictionary 和 NSMutableDictionary
- 如何设计魔方
- 雷铭CMS内容管理系统简介
- [转]Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法
- 2015 多校联赛 ——HDU5344(水)
- 针对报出 cvc-complex-type.2.4.a: Invalid content was found starting with element 问题解决办法
- 2015 多校联赛 ——HDU5344(水)
- poj-2253-Frogger-最短路
- 反射、注解和线程、Thread、同步锁问题和基于多线程的Server通信(8.4)
- [算法专题] 二分搜索&排序数组
- UISlider 和 UISegement
- bzoj [NOI2007]货币兑换Cash (cdq分治+斜率优化 )
- SDKD Summer Team Contest B