Java中多线程的使用!!
简介:
1.要了解多线程,首先我们得先了解进程和线程。那么什么是进程?进程就是一个正在运行的程序分配内存让应用程序能够运行的叫做进程。那么什么又是线程呢?线程:在一个程序中,负责代码的执行,就是一个进程中的执行路劲的称为线程。然而,在一个进程中,同时又多个线程在执行不同的任务时,我们就称为多线程。
2.我们为什么要使用多线程呢?因为在一个进程中,有时候执行的任务,不仅仅只执行的是一个任务,有可能同时在执行多个任务,这时候我们就得用到多线程来解决这个问题!比如说售票,比如有三个窗口,同时在卖同一类型的50张票,窗口一卖了第50张,那么还剩49张,在卖第49张票的时候,有可能是第一个窗口卖出的第49 张票,也有可能是第二个窗口卖出的第49张票,也有可能是第三个窗口卖出去,所有这个时候我们就用到多线程来解决这个问题。那么按上面举的例子,我们怎么用代码来实现这个功能呢?
代码实现 :
class SaleTickets extends Thread{
//设置总票数
static int num = 50;
static Object o = new Object();
public SaleTickets(String name){
super(name);
}
//重写Thread的Run方法
public void run() {
//用一个循环来模拟卖票的功能
while (true) {
//加锁
synchronized ("锁") {
//为了更好的看到效果,让它睡眠0.5秒
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (num > 0) {
System.out.println(this.getName()+"卖了第"+num+"张票");
num--;
}else {
System.out.println("票已经卖完");
break;
}
}
}
}
}
public class Demo2 {
public static void main(String[] args){
SaleTickets s1 = new SaleTickets("窗口1");
s1.start();//开线程
SaleTickets s2 = new SaleTickets("窗口2");
s2.start();//开线程
SaleTickets s3 = new SaleTickets("窗口3");
s3.start();//开线程
}
}
总结:
使用多线程能帮我们解决一个进程中同时执行对个不同的任务,提高了资源的利用率。但是也给CPU增加了负担,降低了进程中线程的执行概率,容易引发线程安全问题,出现死锁现象。所有线程不是开的越多越好!
Java中多线程的使用!!的更多相关文章
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
- 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)
一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...
- java中多线程执行时,为何调用的是start()方法而不是run()方法
Thead类中start()方法和run()方法的区别 1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状 ...
- Java中多线程的使用(超级超级详细)线程池 7
Java中多线程的使用(超级超级详细)线程池 7 什么是线程池? 线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而消耗过多的资源 *使用多线程的好处: 1.降低消耗,减少 ...
- Java中多线程的使用(超级超级详细)线程安全原理解析 4
Java中多线程的使用(超级超级详细)线程安全 4 什么是线程安全? 有多个线程在同时运行,这些线程可能会运行相同的代码,程序运行的每次结果和单线程运行的结果是一样的,而且其他变量的值也和预期的值一样 ...
- Java中多线程原理详解
Java是少数的集中支持多线程的语言之一,大多数的语言智能运行单独的一个程序块,无法同时运行不同的多个程序块,Java的多线程机制弥补了这个缺憾,它可以让不同的程序块一起运行,这样可以让程序运行更加顺 ...
- java中多线程详解-synchronized
一.介绍 当多个线程涉及到共享数据的时候,就会设计到线程安全的问题.非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”.发生脏读,就是取到的数据已经被其他的线 ...
- Java中多线程访问冲突的解决方式
当时用多线程访问同一个资源时,非常容易出现线程安全的问题,例如当多个线程同时对一个数据进行修改时,会导致某些线程对数据的修改丢失.因此需要采用同步机制来解决这种问题. 第一种 同步方法 第二种 同步代 ...
- Java中多线程
引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...
- java中多线程知识
参考:http://www.cnblogs.com/wxd0108/p/5479442. 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只 ...
随机推荐
- bzoj 1226 [SDOI2009]学校食堂Dining(状压DP)
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- 如何将SQL Server运行到Windows Azure上
从2012年6月6日开始,Windows Azure上一些强大的新功能现在可用于预览,包括新的Windows Azure虚拟机(VM).其中有关Windows Azure虚拟机最强大的一件事是他们利用 ...
- 输入n,计算并输出n1+n2+n3+……+n10
// 方法1:双重循环 #include <stdio.h> void main() { int i,j,n,s,t; scanf("%d",&n); s=0; ...
- Linux 下的五种 IO 模型
概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的 ...
- PC问题-使用BAT方法设置IP地址
::------以下为批处理文件内容---- @echo off ::set slection1= set/p slection1=请输入IP地址: netsh interface ip set ad ...
- 问题-delphi无法编辑oracle表
问题现象:在一次开发过程中,遇到了delphi无法编辑oracle表. 问题原因:原来是自己误操作控件的属性了. 问题处理: OraQuery1.ReadOnly:=False; OraQuery1. ...
- PowerShell脚本传递参数
在编写PowerShell脚本的时候,可以通过给变量赋值的方法输出想要的结果,但这样的话,需要改动脚本内容.其实也可以在脚本中定义参数,然后再在执行脚本的时候对参数赋值,而无需改动脚本内容. 在Pow ...
- SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
下面的例子和SQL语句均在SQL Server 2008环境下运行通过,使用SQL Server自带的AdventureWorks数据库. 转载请注明此文原创自 CSDN TJVictor的专栏:ht ...
- [Ember] Creating Your First Ember.js Project with Ember-CLI
In this lesson, we'll setup Ember-CLI and use it to create and run our first Ember.js project. Insta ...
- Linux crontab 命令格式与具体样例
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...