------- android培训、java培训、期待与您交流! ---------
线程的基本概念
现在电脑系统中可以同时运行多个任务,一个任务就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部包含了很多歌顺序的执行流,每一个执行流就是一个线程。进程:独立执行的一个程序称为进程,进程运行时系统开销比较大,进程有自己的内存资源。每个进程之间的资源没有冲突;线程:他可以说为是轻量级的进程,线程运行时对系统的开销小,一个进程中有多个线程,他们共享这个进程中的公共资源。
多进程与多线程:
多进程:在系统中能同时运行多个任务,每个任务为一个进程;进程是重量级的任务,需要分配他们自己独立的地址空间,进程间的通信不仅是昂贵的和受限的,还是低效的。多线程:在同一应用程序中有多个功能流同事执行,线程间的通信不仅是高效的,而且线程间的转也是低成本的。
线程不能以一个文件名方式来独立存在,不能单独执行,只有进程启动后才能启动。线程可以共享相同的内存,线程主要利用它完成重复性的工作。从事一次性较费事的初始化工作。
多线程:1,主要实现并发执行的运行效果,以实现更加复杂的功能。2,可以减轻系统性能方面的瓶颈,可以并行操作。3,提高CPU的处理器效率,在多线程中,通过优先级的管理,可以使重要的程序优先操作,提高了任务管理的灵活性。在多CPU系统中,可以把不同的线程在不同的CPU中执行,真正做到同时处理多任务。
线程的实现:
在JAVA中实现线程有2个方式:1,继承Thread类。2,实现Runnable接口。
1,继承Thread类实现多线程
class MyThread extends Thread{
private String name;
public MyThread (String name){
this,name=name;
}
public void run(){
for (int i=0;i<10;i++){
System.out.println(name + "运行,i = " + i);
}
};
public class Thread{
MyThread mt1 = new MyThread("线程A");
MyThread mt2 = new MyThread("线程B");
mt1.run();
mt2.run();
}
};
2,使用Thread类启动多线程
class MyThread implements Runnable{
private String name;
public MyThread (String name){
this,name=name;}
public void run(){
for (int i=0;i<10;i++){
System.out.println(name + "运行,i = " + i);
}
public class Runnable{
MyThread mt1 = new MyThread("线程A");
MyThread mt2 = new MyThread("线程B");
Thread t1 = new Thread(my1);Thread t2 = new Thread(my2);
t1.start();
t2.start();
}
};
3,线程的休眠
class MyThread implements Runnable{
public void run(){
for(int i = 0;i<5;i++){
try{
Thread.sleep(500);//线程休眠
} catch(Exception e ){}
System.out.println(Thread.currentThread().getName()+"运行,i = " + i);
}
}
};
public class ThreadSleep{
public static void main(String args[]){
MyThread mt = new MyThread();
new Thread(mt,"线程").start();
}
};
4,线程的优先级
a,public static final int MIN_PRIORITY 最低的优先级,常量为1.b,public static final int NORM_PRIORITY 中等优先级,常量为5. c,public static final int MAX_PRIORITY
最高的优先级 常量为10;
同步与死锁
在一个多线程的程序里,如果通过Runnable接口实现的,则意味着类中的属性将被多个线程共享,那么会出现资源同步问题。所有就这种情况就要使用同步,就是多个操作在同一个时间段内只能有一个线程进行,其他的线程要等待此线程完成之后才能继续执行。
同步代码块:synchronized(同步对象){需要同步的代码}
同步方法:synchronized 方法的返回值 方法名称(参数列表){}
死锁:在同步下可以保证资源的共享操作的正确性,但也会产生问题,就是在两个代码中都同步,会造成两个线程都等待对方,从而造成死锁。