学习多线程小结

来源:互联网 发布:网络销售第三方话术 编辑:程序博客网 时间:2024/06/09 17:02

一.了解程序,进程,线程的区别
程序可以看作是静态的代码,进程可以看作是执行中的程序,进程继续细分就是线程。比如360安全卫士对应一个程序,当双击它启动此程序对应着一个进程(可在任务管理器中查看该进程),之后可以在里面同时进行清理垃圾,查杀木马,电脑加速等则对应的是多个线程。
二.创建进程的两种方式(例如:打印1-100之间的偶数)
1.通过继承Thread类的方式
class PrintNum extends Thread{
public void run(){
for(int i=0;i<100;i++){
if(i%2==0){
System.out.println(Thread.currentThread().getName()+”:”+i);
}
}
}
}

public class TestThread{
public static void main(String[] args){
PrintNum p1=new PrintNum();
PrintNum p2=new PrintNum();
p1.setName(“线程1”);
p2.setName(“线程2”);
p1.start();
p2.start();
}
}
2.通过实现(implements)Runnable接口的方式
class PrintNum1 implements Runnable{
public void run(){
for(int i=0;i<100;i++){
if(i%2==0){
System.out.println(Thread.currentThread().getName()+”:”+i);
}
}
}
}
public class TestThread1{
public static void main(String[] args){
PrintNum1 p1=new PrintNum1();
Thread t1=new Thread(p1);
Thread t2=new Thread(p1);
t1.setName(“线程1”);
t2.setName(“线程2”);
t1.start();
t2.start();
}
}
三.线程中常用的方法
run() start() Thread.currentThread() setName() getName() setPriority() getPriority() wait() notify() notifyAll()
四.了解线程的生命周期
五.线程的安全问题
1.出现线程安全问题的原因?
一个线程在操作共享数据还没有结束,同时,另一个线程也参与进来,导致共享数据出现安全问题
2.如何解决线程安全问题?
一个线程在操作共享数据,直至其操作完成,再允许其它的进程参与进来操作共享数据
3.解决线程安全问题的方式?(线程的同步机制)
有两种方式:
①同步代码块
synchronized(同步监视器){
//操作共享数据的代码
}
1)同步监视器:俗称锁。一般代表调用run()方法的当前对象,在创建多线程的实现方式中可以用this来表示,在继承 方式中慎用(可以声明创建一个static类型的Object类对象 static Object obj=new Object(),此时可以用obj来代替this)
2)共享数据:多个线程都来操作的变量或者数据
②同步方法(即当其中一个线程在执行此方法时,其它线程都在外等待,直至此线程执行完此方法)
public synchronized void show(){
//操作共享数据的代码
}
注:所有线程共用同一把锁,同步方法中的锁为this,对于一般方法而言,其同步代码块内的锁为this,若是静态方法,则同步代码块内的锁为当前类
六.线程通信(实现两个线程交替执行)
1. wait() : 一旦线程执行到wait(),就释放当前的锁
2. notify() notifyAll() :唤醒wait()的一个或者多个线程
注:这三个方法只能在同步代码块或者同步方法中使用

0 0
原创粉丝点击