多线程-总结
创建 多线程方式1:【参考WindowTest】
-
创建一个继承Thread的子类
-
重写Thread中的run(),将需要执行的线程代码塞入方法体
-
创建Thread的子类对象
-
-
-
创建 多线程方式2:【参考WindowTest2】
-
创建一个Runnable接口的类
-
实现类去实现Runnable的抽象方法 run()
-
创建实现类的对象
-
将此对象作为参数传递到Thread类的构造器中,创建Thread对象
-
通过Thread类的对象调用start()
-
-
-
-
比较两种创建线程的方式
开发中,优先选择使用实现Runnable接口的方式 原因 1. 实现的方式没有类的单继承行的局限性 2.实现的方式更适合处理多线程共享数据的情况
联系:public class Thread implements Runnable 相同点:两种方式都需要重写run(),将线程需要执行的逻辑声明在run()中
二.线程安全问题的解决
方式一 同步代码块
synchronized(锁){
//需要同步的代码块
}
说明: 1.操作共享数据的代码,即是需要被同步的代码 2.共享数据:多个线程共同操作的变量 比如:本例子的Ticket 3.同步监视器:俗称 锁 ,任何一个类的对象,都可以充当锁
要求: 多个线程必须要共用一把锁
补充: 在实现Runable接口创建多线程的方式中,我们可以考虑使用this充当同步监视器解决了线程安全问题 操作同步代码时 ,只能有一个线程参与,其他线程等待 ,相当于一个单线程过程,效率低
方式二:同步方法
public synchronized void test{
//需要同步的方法体
}
如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步
方法二 总结
-
同步方法仍然设计到同步监视器起,只是不需要显示的声明,要求仍然是必须共用一把锁【参考WindowTest3与WindowTest4】
-
非静态的同步方法,同步监视器:this
-

浙公网安备 33010602011771号