多线程

 

class ThrDemo extends Thread
{
	public void run()    //重写Thread类中的run方法
	{
		System.out.println("线程");
	}
}

class Demo
{
	public static void main(String[] args)
	{
		ThrDemo t = new ThrDemo();
		t.start();  //调用Thread类中的start方法
					  //  使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
	}
}

 

//推荐使用 接口  采用implements 弥补 单继承的缺陷
class ThrDemo implements Runnable
{
	public void run()    //重写Runnable接口中的run方法
	{
		for (int a=1;a<100 ;a++ )
		{
			System.out.println("你好"+Thread.currentThread().getName());
										//public static Thread currentThread()
                                       //返回对当前正在执行的线程对象的引用。
		}		
	}
}

class Demo
{
	public static void main(String[] args)
	{
		ThrDemo td = new ThrDemo();
		Thread t1 = new Thread(td);
		Thread t2 = new Thread(td);
		Thread t3 = new Thread(td);
		t1.start();  //调用Runnable类中的start方法
		t2.start();  
		t3.start();  				
	}
}

 

synchronized(obj)//同步代码块   锁,解决了多线程安全问题,但是消耗资源。
                             // 同步函数的锁是this,静态同步函数锁是class对象
{

}
public synchronized void m()   //this

  

/*
进程 正在进行中的程序
每一个进程执行都有一个执行顺序,该顺序是一个执行路径
线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。
一个进程中至少有一个线程。
JVM启动的时候会有一个java.exe
该进程 至少一个线程负责java程序的执行。
而且这个线程运行的代码存在main方法中。
该线程称之为主线程。

多线程:同时对多个任务加以控制
随机性 谁抢到谁执行

sleep(time)           try  catch  thorws
wait()
notify();
stop();

static Thread currentThread() 获取当前线程对象。
getName();获取线程名称

setName    设置线程名称
构造函数

synchromized(obj)  //同步锁
{

}

同步的前提:必须有两个或两个以上的线程
多个线程必须使用同一个锁
共享的数据,必须同步。

虽然解决了安全问题,但是消耗资源。


同步函数~用的是this锁
如果同步函数被静态修饰后,使用的锁是  该类对应的字节码文件对象。  类名.class
class会封装成  字节码文件对象 (唯一)

object    this       类名.class

class fu extends Thread
{
	private String name;
	fu(String name)
	{
		this.name=name;
	}
	public void run()
	{
		for(int a=1;a<100;a++)
		System.out.println(this.getName()+" "+name);
	}
}

class zi
{
	public static void main(String[] args)
	{
		fu f = new fu("张三");
		fu fs = new fu("李四");
		f.start();
	   fs.start();
	 
	  //System.out.println( str);
	  // for(int a=1;a<100;a++)
	//	System.out.println("朱一");
	}
}*/




/*
需求:简单的卖票程序
多个窗口卖票
*/

class Ticket implements Runnable
{
	private static int tick =100;
	public void run()
	{
		while(true)
		{
		if(tick>0)
		{
			System.out.println("售票"+tick--);
		}
		}
	}

}

class demo
{
	public static void main(String[] args)
	{
		/*
		Ticket t1 = new Ticket();
		Ticket t2 = new Ticket();
		Ticket t3 = new Ticket();
		t1.start();
		t2.start();
		t3.start();*/
		Ticket t1 = new Ticket();
		Thread ts = new Thread(t1);
		Thread ts2 = new Thread(t1);
		Thread ts3 = new Thread(t1);
		ts.start();
		ts2.start();
		ts3.start();
	}
}

 

posted @ 2012-03-27 15:47  微明  阅读(135)  评论(0)    收藏  举报