多线程

来源:互联网 发布:一键root软件 编辑:程序博客网 时间:2024/06/07 11:43
多线程:
线程:进程中的一个控制流程单元。
一个进程中至少有一个线程。
只有一个线程的程序,称为单线程。
有多个线程的程序,称为多线程。

开启多线程有什么好处?
1,提高效率,原理就是在合理使用cpu资源。
2,可以让多部分代码同时执行。

创建示例:聊天程序,接收和发送就是需要同时执行的。

线程的特性:随机性。原理:其实是cpu不断的进行时间片的切换。

想要在Java语言中使用多线程技术,Java对线程这类事物进行描述。
提供了一个对象:Thread。

有一点必须明确:只有Thread类或者Thread类的子类对象才可以调用系统资源创建控制单元。

创建线程的两种方式:
1,继承Thread类。
1.1继承Thread,
1.2复写run方法,将多线程需要运行的代码存入该方法中。
1.3创建Thread的子类对象,(创建线程)
1.4调用start方法开启线程。(start方法做了两个动作,开启线程,调用run方法。)
2,实现Runnable接口。
2.1实现Runnable接口。
2.2复写接口中的run方法。
2.3创建Runnable接口的子类对象。
2.4创建Thread类的对象(创建线程)
2.5将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
原因:多线程去执行指定的run方法。
2.6调用Thread类的start方法开启线程。

class Demo implements Runnable
{
public void run()
{
System.out.println("demo run");
}
}
main()
{
Demo d = new Demo();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.start();
t2.start();
}
两种方式的区别:
1,实现方式和继承方法使用的run方法的位置不同。
2,实现方法避免了单继承的局限性。******

线程的生命周期:
1,被创建。new
2,可运行。start
3,冻结。线程还活着,但是cpu不执行它。sleep,wait.
4,消亡。线程挂了。stop,run结束。(线程执行代码结束,线程就停止)


线程安全问题。
引发原因:
当线程运行的代码中有对成员变量(共享数据)进行多次操作时,就有可能引发安全问题。
因为多条操作同一资源的语句被多个线程分开运行就会发生。

int tick = 100;

run()
{
if(tick>0)
tick--;
}

解决的原理:只要在同一时间段,只让一个线程将这些操作同一资源的代码执行完即可。
这执行过程,其他的线程不可以参与执行该代码。

java提供了同步方式来完成线程安全问题的解决.

1,同步原理:
其实就是通过带锁的代码块将容易出现安全问题的代码进行封装。

2,同步好处:
解决了线程安全问题。
3,同步弊端:
降低了运行效率。(判断锁是较为消耗资源的)

4,同步的表现形式:
1,同步代码块。
synchronzied(对象锁){
需要被同步的代码。(哪些需要同步哪些不需要一定要分清)
}
2,同步函数。
就是在函数上加了synchronzied关键字进行修饰。、
同步代码块可以使用任意对象作为锁。
同步函数使用的锁只有一个,就是this。

5,同步前提:
1,必须是两个或者两个以上的线程。
2,多个线程必须使用同一个锁。
有一个比喻:火车上的卫生间。
ThreadDemo.javaThreadDemo1.javaThreadDemo2.javaThreadDemo3.javaThreadDemo4.javaThreadDemo5.javaThreadDemo6.javaThreadTest.javaThreadTest2.java阶段文档.txtDeadLock.javaThreadDemo7.javaThreadDemo8.javaThreadDemo9.javaThreadDemo10.javaThreadDemo11.javaThreadDemo12.javaThreadDemo13.javaThreadTest3.java多线程.txt


0 0
原创粉丝点击