线程简介--单利模式饿汉式和懒汉式

原创 2013年12月02日 20:39:30
1/创建线程:类继承Thread类复写Runnable的run()方法。start()作用:调用run方法、开启线程。只有调用Strat()方法才能开启线程。

2/线程的的状态:创建、运行、阻塞、死亡四种状态。注:线程的阻塞状态结束之后不一定会立刻执行,该线程需要取得CPU的执行权(意思:具备运行资格,但是没有执行权)。

3/j第二种创建线程的方法:定义类实现Runnable接口,复写Runnable接口的run()方法,创建Thread对象,并将实现Runnable类的对象作为创建Thread对象构造函数的参数。

4/实现Runnable接口可以实现资源共享。

5/停止线程的唯一方法是该线程的run()方法结束(stop()已经过时)。

6/当线处于程冻结状态时(wait(),sleep(),join()等状态时),可用线程调用interrupt()方法对冻结进行清除,此时抛出interruptException异常,然后继续执行。
//
public class Main {

	/**
	 * @param args
	 */
	static int num=0;
	public static void main(String[] args) {
          RunnableTest runnable=new RunnableTest();
          Thread thread1=new Thread(runnable);
          Thread thread2=new Thread(runnable);
          thread1.start();
          thread2.start();
          while (true) {
        	  if(++num==60){//如果num的值为60时,flag为true,并终止循环
        		  thread1.interrupt();//清除异常
        		  thread2.interrupt();
//        		  runnable.setflag();//特殊情况,虽然改变了flag的值,但是并没终止线程循环
        		  break;
        	  }
        	  System.out.println(Thread.currentThread().getName()+"......Main-->"+num);
              }
		}
}

//
public class RunnableTest implements Runnable {
    boolean flag=true;
	@Override
	public   synchronized   void run() {
		
                  while (flag) {
                	  try {
                		  
						wait();//此时Thread1和Thread2分别处于阻状态塞,并放弃了cpu执行权
						
					} catch (InterruptedException e) {
						System.out.println(Thread.currentThread().getName()+"......exception");
						flag=false;//改变flag值退出循环
					}
                	  
					System.out.println(Thread.currentThread().getName()+"......run");
				}		
	}
	public void setflag(){
		flag=true;
	}

}

7/线程死锁:一般出现在双重的同步程序同一把锁,并且不是,两个线程分别拥有的两把锁中不同的一把锁,而这两个线程分别等待对方释放锁

简单例子描述:
    //主方法
    main(){
     //创建两个线程并启动两个线程
    }
    
public class DemoLock implements Runnable{
   Object obj=new Object();
   run(){
        .......

   }
      public synchronized  void show(){//锁是this
          synchronized(obj){//锁是obj
         .....
         }
    }
}

7/线程的单例模式

//单例模式设计

//恶汉式

class  Test
{
          private final Static	Test test=new Test();
		  private Test(){}
		  public static Test getInstence(){
		    return test;
		  }
}


//懒汉式

class Test
{
	private static Test test=null;
	private Test(){}
	public static Test getInstence(){
		if(test==null){
			synchronized (Test.class){
				if(test=null){
	            test=new Test();
				}
			}
		}
		 return test;
	}

}
//懒汉式和饿汉式的区别:懒汉式延迟加载,但懒汉式在多线程并行访问时会出现安全问题,
//解决方法是使用同步函数,但是效率低一点(因为每个线程都要访问锁进行判断),解决方法是双重否定.

单例设计模式详解一:不安全的懒汉式(多线程环境验证)

单例设计模式详解一:不安全的懒汉式(多线程环境验证)单例设计模式详解一不安全的懒汉式多线程环境验证 写在前面的话 饿汉式 懒汉式 验证在多线程环境下懒汉式单例写法的不安全之处 写在前面的话前言:虽然工...

java 单例模式之线程安全的饿汉模式和懒汉模式

单例模式 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在...

关于单例设计模式中的双重判断的理解和分析

之前在很多地方看到过这种单例的实现,但是对其中的两个if判断的作用不理解。今天就详细的解释一下: class SingletonTwo{ /* 持有私有静态实例,防止被引用,此处赋值为n...

string类为什么不能不继承

Java中,是否可以继承String类?为什么? 答案: 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。 public final cl...

单利模式:懒汉式和饿汉式

这里介绍两种单例模式:懒汉式单例、饿汉式单例   单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例...

单利模式-懒汉式-饿汉式

本文是设计模式学习笔记的第二篇文章,主要分析的是单例模式。包括懒汉式,饿汉式,登记式,以及懒汉式的改进型, 还有一个关于读取propertoes配置文件的实例。预计分为三节。这是第一节,先分析最简单的...

单例模式(懒汉式,饿汉式)

  • 2013年10月31日 20:43
  • 761B
  • 下载

(6) Java多线程 线程状态等相关知识(含单例懒汉式饿汉式)

一. 线程状态类型 1. 新建状态(New):新创建了一个线程对象。 2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得...

android 基础 单例模式,懒汉式,饿汉式

class Instance{}   //懒汉式   class LSingle{       private static  Instance _instance = null;      ...

浅析iOS中单例模式的写法(懒汉式&饿汉式&ARC&非ARC&宏)

浅析iOS中单例模式的写法(懒汉式&饿汉式&ARC&非ARC&宏)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程简介--单利模式饿汉式和懒汉式
举报原因:
原因补充:

(最多只允许输入30个字)