Java学习日记1 接触多线程


今天学习了Java的多线程技术~

作为刚起步学习Java的新手乍一看觉得多线程技术是非常牛的技术了~

看了视频教学后,不得不佩服Java的完全面向对象的思想,

它把能够描述的一切都归纳为类,即是是非常非常抽象的东西,甚至是一个思想,一个没有实体的东西,Java也能把它描述归纳为类~~

描述异常和错误,它有类Exception和类Error

描述多线程, 它有Thread

不得不说,Java的确认为万物皆对象.


       多线程实现的方式一般有两种,第一种是

1.继承线程的BOSS类Thread,而一个类Thread的对象,就是一个线程!

2.覆盖父类的run()函数,就是子类自己写一个run()函数,run()内部是需要新线程需要执行的代码~

3.建立子类对象,调用子类的start()函数开启线程,这一步很重要,否则建立的线程不会运行~该函数会调用run()函数而执行其中的代码~

这里以窗口卖票~多个窗口卖票就是多线程的例子来写2种方法实现的程序~

class ticket extends Thread
{
	static Object obj=new Object();  //静态对象obj保证3个线程用的是同一个锁
	private static int tck=50;
	public void run()
	{
		while(true)
		{
			synchronized(obj)  //同步代码块
			{
				if(tck<1)
					break;
				System.out.println(currentThread().getName()+"售票:"+tck);
				tck--;
			}
		}
	}
}

class ThreadTest2
{
	public static void main(String n[])
	{
		ticket t1=new ticket();
		ticket t2=new ticket();
		ticket t3=new ticket();
		t1.start();
		t2.start();
		t3.start();

	}
}


然后是第二种多线程方式,实现接口式;

类Thread有一个带参数的构造函数为Thread(Runnable r)

他接收一个接口Runnable的对象~而Runnable接口里则有一个成员函数为run(),没错~

这个run()方法就是定义多线程执行内容的函数~

实现接口多线程设计的步骤是:

1.定义一个类实现Runnable接口;

2.重写run函数达到覆盖的目的;

3.创建Thread类的对象建立多线程;

4.将Runnable的子类对象作为实参传入Thread(Runnable r)构造函数中~.

5.通过Thread类的对象调用start()函数,开启多线程并执行Runnable子类中的run函数.


下面通过实现方式来重写卖票的例子..


class tck implements Runnable   //实现接口Runnable
{
	Object o=new Object();
	private int num=2000;
	public void run()   	//重写run方法
	{
		while(true)
		{
			synchronized(o)  //同步数据代码块
			{
				if(num<1)
					break;
				System.out.println(Thread.currentThread().getName()+"售出票:"+num);
				num--;
			}
		}
	}
}

class ThreadTest3
{
	public static void main(String ss[])
	{
		tck t=new tck(); //建立一个需要多线程处理类的对象,这样其成员变量值就唯一了.
		Thread t1 =new Thread(t,"窗口1");
		Thread t2 =new Thread(t,"\t\t\t\t窗口2");
		Thread t3 =new Thread(t,"\t\t\t\t\t\t\t\t窗口3");
		Thread t4 =new Thread(t,"\t\t\t\t\t\t\t\t\t\t\t\t窗口4");
		t1.start();
		t2.start();
		t3.start();
   		t4.start();
	}
}


实现接口实现比继承实现其实更加方便,

因为Java是单一继承,若继承了Thead类便无法继承其他类,而实现接口是实现了一个接口,是class   ... extends .. implements ...的模式.

两种方法较为明显的不同就是存放run方法代码的位置不同.


继承实现方式是把run方法的代码放在了Thread的子类的run函数中,

而实现接口方式则是把run方法的代码放在了Runnable的子类的run函数中,通过Thread(Runnable r)的构造方式来把run()函数传入Thread的对象达到多线程的目的,




你可能感兴趣的:(JAVA)