JAVA基础 day11 多线程 同步代码块 死锁问题
2016-09-22 16:26
253 查看
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
线程 是进程中的一个独立控制单元。线程控制着进程的执行。
当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。
创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。
class Demo extends Thread
{
public void run(){
System.out.println(“run”);
}
}
然后实例化线程,通过start方法创建并执行线程,start执行线程中的run方法。
Demo d=new Demo();
d.start();
线程的五种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。
getName();获取线程的名字。
currentThread();获取当前线程对象 Thread.currentThread();
售票程序:当多个线程共享一个数据时,可以把数据定为static。(一般不使用)
创建线程的第二种方式:
定义类实现Runnable接口,覆盖run()方法。
通过Thread类创建线程,然后传入Runnable子类的对象,通过start()开启线程。
class Test implements Runnable
{
public void run()
{
}
}
main方法中创建并开启线程。
Test t=new Test();
Thread t1=new Thread(t);
t1.start();
可以通过这种创建方法,多创建几个线程,共同使用一个对象,例子:售票系统。
使用Runnable接口可以实现多个接口,而继承Thread只能单继承。
多线程的安全问题
当一个线程执行某个代码块时,还未执行完,此时另一个线程进来,就可能引发安全问题。
解决方法:在一个线程执行过程中,其他线程不能执行此代码块。
java为解决这个问题,提出同步代码块。
synchronized(对象)
{
需要被同步的代码。
}
对象可以为任意对象,一般创建一个 object类的对象。
对象如同一个锁,当线程拥有锁时才可以进去执行,否则就算拥有cpu执行权,也无法执行同步代码块的内容。
多线程安全性解决的同时,程序速度会变慢,因为消耗了资源。
把synchronized作为修饰符 修饰函数,说明这个函数为同步函数。
函数都需要被对象调用,通过this函数被引用。
所以同步函数的锁是this。
静态的同步函数的锁是该函数所在类的class文件,也就是类名.class。
写同步程序时尽量避免死锁现象。
线程 是进程中的一个独立控制单元。线程控制着进程的执行。
当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。
创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。
class Demo extends Thread
{
public void run(){
System.out.println(“run”);
}
}
然后实例化线程,通过start方法创建并执行线程,start执行线程中的run方法。
Demo d=new Demo();
d.start();
线程的五种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。
getName();获取线程的名字。
currentThread();获取当前线程对象 Thread.currentThread();
售票程序:当多个线程共享一个数据时,可以把数据定为static。(一般不使用)
创建线程的第二种方式:
定义类实现Runnable接口,覆盖run()方法。
通过Thread类创建线程,然后传入Runnable子类的对象,通过start()开启线程。
class Test implements Runnable
{
public void run()
{
}
}
main方法中创建并开启线程。
Test t=new Test();
Thread t1=new Thread(t);
t1.start();
可以通过这种创建方法,多创建几个线程,共同使用一个对象,例子:售票系统。
使用Runnable接口可以实现多个接口,而继承Thread只能单继承。
多线程的安全问题
当一个线程执行某个代码块时,还未执行完,此时另一个线程进来,就可能引发安全问题。
解决方法:在一个线程执行过程中,其他线程不能执行此代码块。
java为解决这个问题,提出同步代码块。
synchronized(对象)
{
需要被同步的代码。
}
对象可以为任意对象,一般创建一个 object类的对象。
对象如同一个锁,当线程拥有锁时才可以进去执行,否则就算拥有cpu执行权,也无法执行同步代码块的内容。
多线程安全性解决的同时,程序速度会变慢,因为消耗了资源。
把synchronized作为修饰符 修饰函数,说明这个函数为同步函数。
函数都需要被对象调用,通过this函数被引用。
所以同步函数的锁是this。
静态的同步函数的锁是该函数所在类的class文件,也就是类名.class。
写同步程序时尽量避免死锁现象。
相关文章推荐
- java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
- 黑马程序员:Java基础——多线程的死锁问题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- java语言基础(90)——多线程(同步代码块解决多线程售电影票时的负票问题)
- java语言基础(93)——多线程中的死锁问题
- java语言基础(91)——多线程(同步方法解决线程安全问题)
- 多线程死锁问题分析和解决[java]
- java 多线程 避免死锁 哲学家就餐问题
- Java_基础—多线程(同步代码块和同步方法)
- Java_基础—多线程(线程安全问题)
- Java_基础—多线程(死锁)
- Java多线程死锁问题测试
- java 生产者消费者问题-多线程与死锁
- java中多线程安全问题产生&解决方案——同步代码块
- java 多线程系列基础篇(十一)之生产消费者问题
- java多线程常见问题及基础知识
- java线程基础巩固---多线程死锁分析,案例介绍
- JAVA基础多线程的安全问题