java 线程学习
2017-06-27 11:00
85 查看
Java学习笔记:
线程:java语言里的一种特殊功能,进程执行时会分配线程,线程独立执行。需要多条路径切换CPU执行。
使用线程是因为两个进程可以独立执行,不相互影响。
创建线程的第一种方式:继承Thread。(父子关系)
Demo t1 =new demo();
t1.start;
第二种方式:实现Runnable。(不影响类继承其他类),接口为了实现扩展功能。
使用的特点:一个类已经继承了其他的类。可以采用实现的方法创建进程任务。
Demo t3 = new demo(); 创建任务。
Thread t1 = new Thread(t3); 创建线程。
t1.start; 启动线程。
创建Runnable类对象
使用Thread(线程)创建对象,将对象传递给线程。
1, 定义类的实现Runnable
接口
2,覆盖接口Thread
类创建线程对象,并将线程的任务代码封装到run方法中。
3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递:因为线程的任务都封装在Runnable
接口子类对象的run方法中。
所以要在线程对象创建时就必须明确要运行的任务。
4,调用线程对象的static
方法开启线程。
(Thread通过实现Runable
来实现线程)
(将线程任务单独封装成对象)
继承Thread 类,会变成Thread的实例,会继承所有的方法。
实现Runnbale 方法,仅仅是将线程的任务进行对象的封装。
线程开启必须有方法:继承,实现接口对象传递
实现Runnable 的方式好处:
1,将线程的任务从线程的子类中分离出来,进行了单独的封装。
按照面向对象的思想将任务封装成对象。
2,避免了java
单继承的局限性。
所以线程问题以后使用 Runnable
做。
买票问题使用多线程实现:
可以用静态static 共用数据解决问题。勉强。
用Runnable 封装票数,
线程安全问题出现的情况:
1,多个线程使用共用数据时
2,操作共享数据的线程代码
当一个线程在执行操作共享数据的多条代码的过程中,其他线程参与了运算。就会导致线程的安全问题。
解决思路:
就是将多条操作共享数据的线程封装起来,在有线程在执行这些代码的时候,其他线程是不可以参与运算的。
Synchronized :同步代码块:
Synchronize(对象)
{
需要被同步的代码;
}
同步的好处和弊端:
解决了线程的安全问题。
效率有一点点低。因为同步外的线程都会判断同步锁。
同步的使用前提:多线程才使用同步,多线程使用的为同一个锁才使用。
同步代码块:同步代码块的锁是任意的。
同步函数:主线程开启线程后,占用CPU,执行完语句。同步函数使用的锁是当前的对象
this。
两个线程独立执行。
所以同步问题建议使用同步代码块。
静态的同步函数使用的锁是 该函数所属字节码文件对象。
可以用getClass 方法获取,也可以当前 类名.class
表示。
单例:多线程下的单例
饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象。
线程:java语言里的一种特殊功能,进程执行时会分配线程,线程独立执行。需要多条路径切换CPU执行。
使用线程是因为两个进程可以独立执行,不相互影响。
创建线程的第一种方式:继承Thread。(父子关系)
Demo t1 =new demo();
t1.start;
第二种方式:实现Runnable。(不影响类继承其他类),接口为了实现扩展功能。
使用的特点:一个类已经继承了其他的类。可以采用实现的方法创建进程任务。
Demo t3 = new demo(); 创建任务。
Thread t1 = new Thread(t3); 创建线程。
t1.start; 启动线程。
创建Runnable类对象
使用Thread(线程)创建对象,将对象传递给线程。
1, 定义类的实现Runnable
接口
2,覆盖接口Thread
类创建线程对象,并将线程的任务代码封装到run方法中。
3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递:因为线程的任务都封装在Runnable
接口子类对象的run方法中。
所以要在线程对象创建时就必须明确要运行的任务。
4,调用线程对象的static
方法开启线程。
(Thread通过实现Runable
来实现线程)
(将线程任务单独封装成对象)
继承Thread 类,会变成Thread的实例,会继承所有的方法。
实现Runnbale 方法,仅仅是将线程的任务进行对象的封装。
线程开启必须有方法:继承,实现接口对象传递
实现Runnable 的方式好处:
1,将线程的任务从线程的子类中分离出来,进行了单独的封装。
按照面向对象的思想将任务封装成对象。
2,避免了java
单继承的局限性。
所以线程问题以后使用 Runnable
做。
买票问题使用多线程实现:
可以用静态static 共用数据解决问题。勉强。
用Runnable 封装票数,
线程安全问题出现的情况:
1,多个线程使用共用数据时
2,操作共享数据的线程代码
当一个线程在执行操作共享数据的多条代码的过程中,其他线程参与了运算。就会导致线程的安全问题。
解决思路:
就是将多条操作共享数据的线程封装起来,在有线程在执行这些代码的时候,其他线程是不可以参与运算的。
Synchronized :同步代码块:
Synchronize(对象)
{
需要被同步的代码;
}
同步的好处和弊端:
解决了线程的安全问题。
效率有一点点低。因为同步外的线程都会判断同步锁。
同步的使用前提:多线程才使用同步,多线程使用的为同一个锁才使用。
同步代码块:同步代码块的锁是任意的。
同步函数:主线程开启线程后,占用CPU,执行完语句。同步函数使用的锁是当前的对象
this。
两个线程独立执行。
所以同步问题建议使用同步代码块。
静态的同步函数使用的锁是 该函数所属字节码文件对象。
可以用getClass 方法获取,也可以当前 类名.class
表示。
单例:多线程下的单例
饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象。
相关文章推荐
- java线程学习基础
- Java线程学习和总结
- java多线程学习五:线程间的通信
- 关于java 线程学习
- java学习之进程和线程
- java学习日记(线程)
- Java多线程学习 (一) 前台、后台线程
- java多线程学习三:联合线程
- 今天学习了JAVA程序、线程、进程的区别
- java Thread类 线程学习 一:
- java线程初步学习
- Java线程学习和总结
- java 线程学习(一)
- Java线程学习
- Java线程学习11.30
- Java 学习笔记 (5) - 线程 Thread
- Java线程学习和总结
- JAVA学习【知】线程
- Java基础学习笔记(十)线程的创建总结
- java Thread类 线程学习 一: