对于多线程,我自己的应用之处,确实很少,近期在用一些javaweb框架之时,总感觉迷迷糊糊,从基础的类的创建、变量的类型、结构的设计、框架的实现原理、设计模式…等等,这些,都让我突然感觉,我好像什么都不会了,好想知道“为什么!”。这莫非就是所说的“瓶颈期”吧!哈,不多说,开始总结。
本次包括后面的多线程总结,主要是根据张老师的视频and一本从入门到放弃,以及度娘来的。(很零散!)
先从最开始的地方开始。在Java中,多线程常用的实现有两种方式:
1、扩展java.lang.Thread类
2、实现java.lang.Runnable接口(基本都用这个:优点-java中可以实现多个接口;再就是,更符合面向对象的思维)
写在代码之前:多个线程对同一对象的操作,才会引起过程的混乱(不安全),所以,事例代码中,用一个类对象作为这个公共对象去说明,同时,该类中,封装了多个线程对所执行的业务逻辑,这样处理的好处就是便于维护。最后,为了方便演示,该类以内部类的方式声明!
惯例:码上学习!
/**
用两个线程,分别打印nashinianshao(那时年少)和qingkuang(轻狂)。在不加synchronized关键字时,会出现打印混乱的情况(第一个线程刚打印了nashin,第二个线程就开始qingkuang)。
*/
public class ThreadSynchronized {
public static void main(String[] args) {
new ThreadSynchronized().init();
}
private void init() {
//在使用内部类创建对象之前,应该先有外部类对象,所以在18行这么调用。
final Outputer outputer = new Outputer();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
//睡一会,不然的话,一直疯狂打印,计算机会卡屏
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.output("nashinianshao");
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.output3("qingkuang");
}
}
}).start();
}
static class Outputer {
//String pubObject = "";
//方法1:synchronize包在逻辑代码块外面,()中的对象,可以用58行的pubObject作为两个线程的公共对象;也可以用“this”表示当前new的对象(效果同方法2);当然也可以像现在这样,用类的字节码,这样的话,和方法3(静态方法,公共对象采用的肯定只有类的字节码了)效果就一样了
public void output(String name) {
int len = name.length();
synchronized (Outputer.class) {
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
//方法2:synchronized直接写在方法名上即可(这样写的话,公共对象采用的就是23行new的对象)
public synchronized void output2(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
//方法3:静态方法,采用类字节码作为公共对象
public static synchronized void output3(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
好了,简洁总结,深刻理解。有不对的地方,欢迎指出,在此谢过。
原文:—多线程:(一)线程同步
那时年少轻狂,把喜欢当做筹码,才敢肆无忌惮的任性。
—-那时年少轻狂