1. 进程和线程
通过下面的案例体会线程的概念:(应用程序中不同的运行分支,有几条运行分支就有几个线程,那么可以通过多线程变成完成系统的并发任务)
/**
*测试线程的类
*@authorliuhx
*
*/
publicclass ThreadDemo01{
publicstaticvoid main(String args[]){
MyThread t1 = new MyThread();
t1.setName("自定义线程1");
t1.start();
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" i==="+i);
}
}
}
//线程类
class MyThread extends Thread{
@Override
publicvoid run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" i==="+i);
}
}
}
2. Java如何实现线程?
/**
*测试线程的类
*@authorliuhx
*
*/
publicclass ThreadDemo01{
publicstaticvoid main(String args[]){
//第三步:创建线程对象
MyThread t1 = new MyThread();
t1.setName("自定义线程1");
//第四步:启动线程start方法,不能使用run方法。(不需要程序员显示的调用run方法)
t1.start();
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" i==="+i);
}
}
}
//线程类
//第一步:写线程类,继承Threa的类
class MyThread extends Thread{
//第二步:重写run方法(线程完成的功能均放入到这个方法中)
@Override
publicvoid run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" i==="+i);
}
}
}
publicclass ThreadDemo02{
publicstaticvoid main(String args[]){
MyThread02 t1 = new MyThread02();
Thread myt1 = new Thread(t1);
myt1.setName("自定义线程1");
myt1.start();
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" i==="+i);
}
}
}
//线程类
class MyThread02 implements Runnable{
publicvoid run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" i==="+i);
}
}
}
3. 线程的状态?
线程的生命周期,整个生命周期经历那些状态。
新建:MyThread t1 = new MyThread();创建线程对象后,该线程处于新建状态。
就绪状态(可运行状态):当执行完start()方法之后,在抢占cpu之。
运行状态:抢占cpu后,处于运行状态,(这个时候执行run()方法);
阻塞状态(3种阻塞状态)i/0,调用sleep()方法 join() yield()
死亡状态:当运行完run方法后,正常死亡。也可以调用stop方法让其死亡。
4. 控制线程常用的方法有哪些?
调用sleep()方法 join() yield()stop
5. 线程的优先级
6. 线程同步
多线程如果存在共享资源,那么会出现共享资源异常的情况。
为了解决上面的问题,引入了线程的同步机制。
同步机制是利用对象的锁或者类的锁
每一个对象均有一个锁。
Synchronized来实现同步(两种方式)
synchronized(对象){
同步代码块
}
同步方法:在方法的前面加上synchronized修饰符
publicclass SynchrDemo01 {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
ThreadDemo03 tr3=new ThreadDemo03();
Thread t3=new Thread(tr3);
Thread t4=new Thread(tr3);
Thread t5=new Thread(tr3);
t3.start();
t4.start();
t5.start();
}
}
/**
*inta=1;
*a+=i;
*a-=i;
*System.out.println(a);
*
*多线程共同操作上面几行代码
*@authordell
*
*/
class ThreadDemo03 implements Runnable{
Integer a=1;
/* public synchronized void run() {
for(int i=0;i<100;i++){
//int a=1;
a+=i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a-=i;
System.out.println(a);
}
}*/
/**
*synchronized(对象){
* 同步代码块
*}
*java每一个对象均有对象锁,每一个类有一个类锁。
*synchronized同步代码块用对象锁。
*在synchronized中用哪个对象的锁呢?
* 同步代码块中使用了哪个共享对象,我们synchronized选择的是共享对象的锁。
*
*/
public void run() {
synchronized(a){
for(int i=0;i<1000;i++){
//int a=1;
a+=i;
a-=i;
System.out.println(a);
}
}
}
}
7. 线程之间通信