------- android培训、java培训、期待与您交流! ----------
多线程的定义:进程中的一个独立的控制单元,线程控制着进程的执行。而进程是一个执行执行中的程序。一个进程中至少有一个线程,而且这个线程运行的代码存在于main方法中,该线程称之为主线程。更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的线程。多线程具有特征性。
自定义线程的方法:通过对API的查找,java已经提供了对线程这类事物的描述,就是Threa类。
创建线程总共有两种方法
一、继承Threa类
步骤:
1、定义类继承Threa类中的方法。
2、复写Thread类中的方法:将自定义的代码存储在run方法中,让线程执行。
3、调用线程的start方法,该方法有两个作用:第一:启动线程。第二:调用run方法。
class Test extends Thread
{
public void run()
{
for(int x=0;x<60;x++)
{
System.out.println("test run.."+x);
}
}
}
class Thread Test
{
public static void main(String[] args)
{
Test t1=new Test();
Test t2=new Test();
t1.star();
t2.star();
}
}
二、实现Runnable接口
步骤:
1、定义类实现Runnable接口。
2、覆盖Runnable接口中的run方法。
3、通过Thread子类建立线程对象。
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
class Ticket implements Runnable
{
public void run()
{
for(int x=0;x<60;x++)
{
System.out.println("test run.."+x);
}
}
}
class Thread Test{ public static void main(String[] args)
{
Ticket t=new Ticket();
Test t1=new Test(t);
Test t2=new Test(t);
t1.star();
t2.star();
}
}
实现Runnable方式和继承Thread方式的区别:实现方式避免了单继承的局限性,在定义线程时,建立使用实现方式。
继承Thread:线程代码存放在Thread子类run方法中。
实现Runnable:线程代码存放在接口子类的run方法。
多线程可以通过star()运行,被sleep(time)/wait()冻结,被sleep()消亡,被notify()或notifyALL()取消冻结。 多线程的安全问题原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行另一个线程参与进来,导致共享数据的错误。
解决办法:对多余操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。java对于多线程的安全问题提供了专业的解决方式————同步代码块
synchronized(Demo)
{
需要被同步的代码
}
弊端:多个线程需要判断锁,较为消耗资源。
好处:解决了多线程的安全问题。
还有一种同步方式为————同步函数
class Ticket implements Runnable
{
public synchronized void run()
{
for(int x=0;x<100;x++)
{
System.out.println("love mano"+x);
}
}
}
class Demo
{
public static void main(String[] args) {
Thread t=new Thread();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.star();
t2.star();
}
}
学习心得:
收获:通过多线程的学习更好地了解java虚拟机的工作原理,同时实现了多线程同时进行的功能。
不足:继承Thread类与实现Runnable方法与函数的使用还不够熟悉,多线程间的通信原理要加深了解。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------