Thread

//线程中断,
public class TestDemo3 {

	public static void main(String[] args) {
       final Thread thread1=new Thread(){
    	   public void run(){
    		   while(true){
    			   System.out.println("去睡觉了,5000毫秒之后见");
    			   try{
    				   Thread.sleep(5000);
    			   }catch(InterruptedException e){
    				   e.printStackTrace();
    				   System.out.println("终止当前线程");
    				   break;
    			   }
    		   }
    	   }
       };
           
       Thread thread2=new Thread(){
    	   public void run(){
    		   for(int i=0;i<=12;i++){
    			   System.out.println("thread2");
    			   try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		   }
    		   System.out.println("thread2执行了12秒了");
    		   thread1.interrupt();
    	   }
    	   
       };
       thread1.start(); 
       thread2.start();
	}

}

Thread
反射
知识点
1 两种方式创建线程
1)继承Thread类
a 继承Thread类, 覆盖run()方法, 提供并发运程的过程
b 创建这个类的实例
c 使用start() 方法启动线程

2)实现Runnable接口
a 实现Runnable接口, 实现run()方法, 提供并发运程的过程
b 创建这个类的实例, 用这个实例作为Thread构造器参数
创建Thread类.
c 使用start() 方法启动线程

class Foo implements Runnable{
public void run(){
//....
}
}
Thread t = new Thread(new Foo());
t.start(); //扩展性比较好
3)使用 内部类/匿名类 创建线程
案例: thread2.Demo1
public abstract interface java.lang.Runnable {

// Method descriptor #1 ()V
public abstract void run();
}
2 Sleep 的打断唤醒
1) Thread.sleep(times) 使当前线程从 Running 放弃处理器
进入Block状态, 休眠times毫秒, 再返回到Runnable
2)一个线程可以提前唤醒另外一个sleep Block的线程
interrupt() 打断/中断
3) 被唤醒线程出现 中断异常

3 异步, 同步
1) 异步: 并发, 各干自己的: 如: 一群人上卡车
2) 同步: 步调一致的处理, 如: 一群人上公交车
案例: thread2.Demo5
4) 案例异步写文件

1) 一个线程负责将控制台信息读取到LinkedList
如果控制台输入quit 将结束输入. 中断写出线程

2) 一个线程负责将LinkedList的信息写到test2.txt
每次检查LinkedList是否有数据, 如果有就写出, 直到空为止
如果没有数据就休眠5秒
写出线程是后台线程, 可以自动结束
线性并发安全问题
案例: thread2.Demo7
1) 多个线程并发读写同一个临界资源时候会发生"
线程并发安全问题"
2) 常见的临界资源:
多线程共享实例变量
静态公共变量
3) 使用同步代码块解决线程并发安全问题
synchronized(同步监视器){
}
a 同步监视器 是一个任意对象实例. 是一个多个线程之间的互
斥的锁机制. 多个线程要使用同一个"监视器"对象 实现同步互斥
b 常见写法:
synchronized(this){
// 把当前的资源跟当前访问的线程绑定在一起
}
c 如果方法的全部过程需要同步, 可以简单使用 synchronized
修饰方法. 相当于整个方法的 synchronized(this)
d 尽量减少同步范围, 提高并发效率


Java 反射
1) 反射是Java自我管理(类, 对象)的机制


2) * 可以通过反射机制发现对象的类型 发现类型的方法/属性/
构造器
3) * Java 反射 可以创建对象并访问任意对象方法和属性等


类 Class<T>
java.lang.Object
java.lang.Class<T>
类型参数:
T - 由此 Class 对象建模的类的类型。例如,
String.class 的类型是 Class<String>。
如果将被建模的类未知,则使用 Class<?>。
int a;
Person p;
类型 变量;
类的类型 class对象
Class<Person> type = Person.class;

1) 创建对象的时候:
a Person p = new Person();
b 利用反射来创建对象(3种,前两种必须知道)
案例: ref1.Demo8
//1 第1种
// 1)先创建class对象
Class<?> type = Person.class;//创建Class对象type
// 2)type.newInstance():通过type来创建Preson对象
Person person2 = (Person)type.newInstance();
System.out.println("通过反射来创建Person对象"+person2);
//2 第2种:根据类的包名.类名来创建class对象
Class<?> type2 = Class.forName("ref1.Person");
Person person3 = (Person) type2.newInstance();
System.out.println(person3);
//3 第3种:对象名.getClass()也可以获得class对象
Class<?> type3 = person.getClass();
Person person4 = (Person) type3.newInstance();
System.out.println(person4);

2) Class 加载
类加载到内存: java 将磁盘类文件加载到内存中,为一个
对象(实例)这个对象是Class的实例,也就是 这些对象都是
Class实例

3) 带参数构造方法如何创建对象?
5)Class 实例代表Java中类型,
基本类型的类型: int.class, long.class
类类型 Class 实例获得如下:
Class cls = String.class;
Class cls = Class.forName("java.lang.String");
Class cls = "abc".getClass();
以上方法获得cls 是同一个对象, 就是String 类内存加载的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值