---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
1.进程:一个应用就是一个进程。
进程是控制程序的执行先后顺序,该顺序是一个执行路径,或者叫一个控制单元。
线程:线程是进程中的一个分支,它可以与进程(主线程)并行运行。一个进程中至少有一个线程(主线程)。
2.线程的创建:
a.继承方式:直接继承Thread,然后复写run()方法。new线程对象调用start()开启线程。
//定义一个类,继承Thread类.
class myThread extends Thread
{
//对run()方法进行重写.
public void run()
{
}
}
public myThreadTest
{
//主函数
public static void main(String[] args)
{
//调用start()方法启动线程
new myThread().start();
}
}
b:实现方式:实现Runnable接口,然后复写run()方法。new线程对象调用start()开启线程。
//实现Runnable接口.
class myThread implements Runnable
{
//重写run()方法
public void run()
{
}
}
public class myThreadTest
{
public static void main(String[] args)
{
//new一个线程对象,参数为实现Runnable接口的对象,然后调用线程对象的start()方法启动线程
new Thread(new myThread()).start();
}
}
3.多线程的安全问题:
a.用synchronized(key)给容易出现安全问题的代码同步。也就是加锁。相当于一个权限的问题,加锁之后就可以进行操作了,操作完成后在解锁。这样更安全
同步前提:1.必须要有两个或以上的线程;2.必须是多个线程用同一个锁。
b.同步代码块:是用synchronized把需要同步的代码包含在内
synchronized(new Object())//给synchronized下面的代码加锁.锁是new Object()
{
//需同步的执行代码。
}
同步函数(锁是this,静态同步函数的锁是class对象(类名.class)。)
public synchronized void show()对代码进行加锁
{
//需同步的执行代码。
}
4.守护线程:也称为后台线程,主线程结束,守护线程自动结束。在开启线程start()方法前通过setDaemon()方法开启守护线程
class StopThreadDemo
{
public static void main(String[] args)
{
//创建守护线程.
StopThread st =new StopThread();
//创建线程,并传入守护线程
Thread t1=new Thread(st);
//创建线程,并传入守护线程
Thread t2=new Thread(st);
//开启t1守护线程
t1.setDaemon(true);
//开启t2守护线程
t2.setDaemon(true);
//启动t1线程
t1.start();
//启动t2线程
t1.start();
}
}
class StopThread implements Runnable//实现Runnable接口
{
//重写run()方法
public void run()
{
//代码
}
}
5.死锁:多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不能正常终止。
例如有t1,t2两个线程
线程t1锁定一些资源,线程t2也锁定一些资源,
而t1执行完之后需要得到t2锁定的资源才能进行操作。
且t2执行完之后也需要得到t1锁定的资源才能进行操作。
这时两个线程都出现了要得到资源之后才能继续执行。而t1霸占着t2的资源,t2也霸占着t1的资源。都获取不到自己所需资源,也都不释放当前资源。因此形成了线程的死锁。
----------------------
ASP.Net+Android+IOS开发
、
.Net培训
、期待与您交流! ----------------------详细请查看:
http://edu.csdn.net