进程有自己独立的内存空间,线程之间是共享内存的
使用Thread来实现多线程,弊端比较多,不建议使用。
Runnable接口(最常用的实现多线程的接口,建议使用)
Runnable 接口 相对于 继承Thread类来说,有以下优点:
1, 适合多个相同程序的代码(同一段代码,开辟N个线程)去处理同一个资源(比如联网售票,票的个数是共同的)的情况。// 把线程(售票点),实现代码(卖票)和数据(票)有效的分离开,较好的实现了面向对象的设计思想。
2, 可以避免由于java的单继承特性所带来的局限性。比如:一个已经继承了父类的子类,就不能再继承Thread类,这时就可以用Runnable接口实现多线程。
3, 有利于程序的健壮性,代码和数据都可以被多个线程共享。当线程被开辟时,只需要把一个实现了代码和数据(如上面代码中的new TestThread)的对象(如上面代码中的tt)传入,此时的这个对象就是一个实现了Runnable接口的实例。
前(后)台线程:(后台线程也叫守护线程)
对JAVA程序来说,只要还有一个前台线程在运行,程序就不会结束。只有当程序只有后台线程在运行的时候,程序才会结束。
对于上面的程序来说,永远不会结束,因为前台线程是一个无限循环。
如果在new Thread(tt).start()前加上一句new Thread(tt).setDaemon(true);就会将该线程变为后台线程。
可以这么理解:前台循环有硬性规定(必须全部执行完)
多线程的同步:(只有涉及到线程安全的时候再使用)
使用同步的时候,所共享的数据,要设置为private。这样不会被外部访问或修改,可以保持一致性。
卖票系统中:有一个if(tickets>0)的判断,假设现在票数为1,执行判断结果为真。
就在此时,也许会突然转换为另一个线程(这个由cpu控制,有这种可能发生)。
这时在另一个线程tickets仍然为1,票数是共享的,所以在另一个线程结束后,票数会减1,此时的tickets是 0。
返回之前的线程湖,因为之前判断的时候,tickets是1,而此时tickets为0,打印出来的是0,如果线程多,还有可能出现-1,-2等。这样就会出现错误。(习惯称为线程安全问题)
概念性的东西太多 我也没学好 就不多说了........
分享到:
相关推荐
c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程...
基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...
Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...
Qt中利用OpenCV2.4.4多线程打开多摄像机 每个线程处理一个摄像机,从中拿出帧显示到主线程的Label控件上 模拟了一个16个摄像机的场景,有不开多线程和打开多线程的对比。 可以明显感觉到打开多线程后主界面不卡了。 ...
在计算机处理器发展为包含越来越多的核心的时期,多线程是创建可伸缩性、高效的、高响应性应用程序的关键因素。如果你没有正确地使用多线程,它会导致难以捉摸的问题,需要你花费大量时间去解决。因此,现代应用程序...
最近用多线程用的比较多自己走了一些弯路,分享出来希望大家少走弯路,C#中的多线程有两个重载,一个是不带参数的,一个是带参数的,但是即便是带参数的多线程也不支持泛型,这使得使用泛型参数多线程的时候很不方便...
c语言多进程多线程编程
串口通信的实现,编程环境为C#,实现技术采用了多线程方式
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)...
c#大漠多线程模板
Qt中利用OpenCV2.4.4多线程打开多摄像机 每个线程处理一个摄像机,从中拿出帧显示到主线程的Label控件上 模拟了一个16个摄像机的场景,有不开多线程和打开多线程的对比。 可以明显感觉到打开多线程后主界面不卡了。 ...
Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行
多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程
是多线程的测试,对学习多线程的朋友有用,使用C#2008来编写的,需要的朋友可以去下载
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
excel vba 多线程 实例 excel vba 多线程 实例
简单多线程编程入门,可以帮助你实现第一个多线程程序
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....