多线程:
多进程与多线程的本质区别是每个进程都拥有自己的一整套变量,而线程则共享数据.
共享变量使得线程之间的通信更有效、更方便
启动线程调用的是Thread的start方法,而不是run方法。start方法来自JVM_StartThread,其中的方法中有vmSymbolHandles调用run方法
Runnable接口实现多线程:
runnable接口中有run()抽象方法的声明;
使用runnable避免了使用Thread实现多线程产生的单继承的局限,同时比Thread实现多线程更好的体现类的共享。
runnable通常使用匿名内部类或者lamada表达式创建多线程;
callable:
在jdk1.5中添加的新的开发包Java.uti.concurrent下定义了一个新的接口callable,用于有返回值的线程
线程名的创建:
thread()构造方法,在创建线程的时候设置名称;
setName()设置名称,getName()获取线程的名称
currentThread()获取当前进程的信息
如果在创建线程时未取名字,则会直接分配一个名称;线程的名称不可重复,且在过程中不要修改
在实际编译运行中Java都会创建一个进程,而主方法是进程中的一个线程,所有的线程都是通过主线程创建和启动的;
在一个进程中有多个线程时要明确,线程进入run()方法是依次的,但是真正进入的对象的数量不一定。进入的代码的顺序不一定,但是总体是并发的
sleep、 yield 、join方法的区别
sleep()方法是暂缓线程,待特定的时间后再执行当前线程,sleep方法不可以释放锁;
yield()方法暂停当前进程,让出CPU权限,让其他线程执行完毕后,再执行主线程
停止线程有三种方法:
1.设置标志位;
2.使用禁用的stop方法;
3.使用Thread中的interrup中断线程(给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态。开
发人员根据中断标志的具体值,来决定如何退出线程。)