代码体现:
public class MyThread extends Thread
{
public void run()
{
for(int x=0; x<100; x++)
{
System.out.println(getName()+"---"+"hello"+x);
}
}
}
public MyThreadTest
{
public static void main(String[] args)
{
MyThread my1 = new MyThread();
MyThread my2 = new MyThread();
my1.start();
my2.start();
}
}
多线程(理解)
(1)就是应用程序有多条执行路径。
进程:就是正在运行的程序。
线程:就是进程的执行路径,执行单元。
(2)如何使用多线程程序:(掌握)
A:方式1 继承Thread类。
a:创建类继承Thread类
b:重写Thread类的run()方法。
run()方法里面才是封装线程的代码。
c:通过调用start()方法启动线程并调用run()方法。
B:方式2 实现Runnable接口
a:创建一个类实现Runnable接口
b:重写run()方法
c:创建实现类对象,并把它作为参数传递给Thread类的构造方法,创建Thread对象
d:通过Thread的对象执行
代码体现:
public class MyRunnable implements Runnable
{
public void run()
{
public void run()
{
for(int x=0; x<100; x++)
{
System.out.println(Thread.currentThread().getName()+"---"+"hello"+x);
}
}
}
}
public class MyRunnableTest
{
public static void main(String[] args)
{
MyRunnable my = new MyRunnable();
Thread t1 = new Thread(my);
Thread t2 = new Thread(my);
t1.start();
t2.start();
}
}
(3)线程的随机性原理
多个程序其实是CPU的在做着高效切换执行的。
(4)线程的生命周期(面试题 自己补齐)
新建
就绪
运行
阻塞
死亡
(5)线程安全问题
A:卖票案例
B:为什么有问题
a:有共享数据
b:共享数据被多条语句操作
c:在多线程环境中
(6)线程安全问题的解决方案:
A:同步代码块
synchronized(锁对象)
{
被同步的代码
}
B:同步方法
把synchronized加在方法上。
一般推荐使用同步代码块。
(7)线程间的通信问题
学生类:
设置学生属性的类:
获取学生属性的类:
测试类:
(8)常见的方法
优先级
暂停线程
加入线程
守护线程
(9)面试题:
sleep()和wait()的区别?
启动线程到底调用的是哪个方法?
run()和start()的区别?
同步的原理,以及有几种实现方式?