三九宝宝网宝宝百科宝宝知识

编写一个多线程的java程序

02月28日 编辑 39baobao.com

[C语言编写一个程序要求输入一个年份程序判断其是否为闰年]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include<stdio.h> voidmain() { inti,year,n; do { scanf("%d",&year); if(((year%4==0)&(year%100!=0)) || year%400=...+阅读

public class DoubleThread {

public static void main(String[] args) {

Thread t1 = new Thread() {

Override

public void run() {

for (char i = 'a'; i System.out.println(i);

}

}

};

Thread t2 = new Thread() {

Override

public void run() {

for (char i = 'A'; i System.out.println(i);

}

}

};

t1.start();

t2.start();

}

}

如何使用Java编写多线程程序1

一、简介1、什么是线程要说线程,就必须先说说进程,进程就是程序的运行时的一个实例。线程呢可以看作单独地占有CPU时间来执行相应的代码的。对早期的计算机(如DOS)而言,线程既是进程,进程既是进程,因为她是单线程的。当然一个程序可以是多线程的,多线程的各个线程看上去像是并行地独自完成各自的工作,就像一台一台计算机上运行着多个处理机一样。在多处理机计算机上实现多线程时,它们确实可以并行工作,而且采用适当的分时策略可以大大提高程序运行的效率。但是二者还是有较大的不同的,线程是共享地址空间的,也就是说多线程可以同时读取相同的地址空间,并且利用这个空间进行交换数据。 2、为什么要使用线程为什么要使用多线程呢?学过《计算机体系结构》的人都知道。将顺序执行程序和采用多线程并行执行程序相比,效率是可以大大地提高的。比如,有五个线程thread1, thread2, thread3, thread4, thread5,所耗的CPU时间分别为4,5,1,2,7。(假设CPU轮换周期为4个CPU时间,而且线程之间是彼此独立的)顺序执行需要花费1Array个CPU时间,而并行需要的时间肯定少于1Array个CPU时间,至于具体多少时间要看那些线程是可以同时执行的。这是在非常小规模的情况下,要是面对大规模的进程之间的交互的话,效率可以表现得更高。 3、java中是如何实现多线程的与其他语言不一样的是,线程的观念在java是语言中是重要的,根深蒂固的,因为在java语言中的线程系统是java语言自建的, java中有专门的支持多线程的API库,所以你可以以最快的速度写一个支持线程的程序。在使用java创建线程的时候,你可以生成一个Thread类或者他的子类对象,并给这个对象发送start()消息(程序可以向任何一个派生自 Runnable 接口的类对象发送 start() 消息的),这样一来程序会一直执行,直到run返回为止,此时该线程就死掉了。在java语言中,线程有如下特点:§ 在一个程序中而言,主线程的执行位置就是main。而其他线程执行的位置,程序员是可以自定义的。值得注意的是对Applet也是一样。

§ 每个线程执行其代码的方式都是一次顺序执行的。

§ 一个线程执行其代码是与其他线程独立开来的。如果诸线程之间又相互协作的话,就必须采用一定的交互机制。

§ 前面已经说过,线程是共享地址空间的,如果控制不当,这里很有可能出现死锁。 各线程之间是相互独立的,那么本地变量对一个线程而言就是完全独立,私有的。所以呢,线程执行时,每个线程都有各自的本地变量拷贝。对象变量(instance variable)在线程之间是可以共享的,这也就是为什么在java中共享数据对象是如此的好用,但是java线程不能够武断地访问对象变量:他们是需要访问数据对象的权限的。二、准备知识 在分析这个例子之前,然我们先看看关于线程的几个概念,上锁,信号量,和java所提供的API。 上锁对于大多数的程序而言,他们都需要线程之间相互的通讯来完成整个线程的生命周期,二实现线程之间同步的最简单的办法就是上锁。为了防止相互关联的两个线程之间错误地访问共享资源,线程需要在访问资源的时候上锁和解锁,对于锁而言,有读锁,写锁和读写锁等不同的同步策略。在java中,所有的对象都有锁;线程只需要使用synchronized关键字就可以获得锁。在任一时刻对于给定的类的实例,方法或同步的代码块只能被一个线程执行。这是因为代码在执行之前要求获得对象的锁。 信号量通常情况下,多个线程所访问为数不多的资源,那怎么控制呢?一个比较非常经典而起非常简单的办法就是采用信号量机制。信号量机制的含义就是定义一个信号量,也就是说能够提供的连接数;当有一个线程占用了一个连接时,信号量就减一;当一个线程是放了连接时,信号量就加一。

JAVA多线程运行流程

因为你sync的是两个对象,而你真正去修改的是类成员变量。所以锁就没有用啦。

如果我没猜错,你应该想要得到的是从100-1的倒顺输出。这样的话你只需要把两个synchronized的参数都改成 synchronized(SellTicket.class) 就可以

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

if(x % 2== 0) {

synchronized(SellTicket.class) {

if(tickets > 0) {

try{

Thread.sleep(100);

} catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()

+ "正在出售第"+ (tickets--) + "张票 "+ "x="+ x + "我是if");

}

}

} else{

synchronized(SellTicket.class) {

if(tickets > 0) {

try{

Thread.sleep(100);

} catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()

+ "正在出售第"+ (tickets--) + "张票 "+ "x="+ x + "我是else");

}

}

}

以下为关联文档:

用C语言编写一个随机点名程序例: #include/*standardinput&output*/ #include/*standardlibary*/ #include/*string*/ #include/*ConsoleInput/Output*/ #include structstudentinfo/*学生信息的结构体*/...

用java编写程序读取并显示当时时间格式为年月日小时分钟秒import java.util.*; import java.text.SimpleDateFormat; public class test { public static void main (String args[]) { Date d = new Date(); long longtime = d.getT...

编写一个VBA程序要求打印2014年的每月日历你可以用窗体打印的方法 Private Sub CommandButton1_Click() Calendar1.Year = 2014 CommandButton1.Visible = False For i = 1 To 12 Calendar1.Month = i UserForm1.Pri...

用VB编写一个倒计时的程序Dim t Dim start As Boolean Private Sub Command1_Click() If start = False Then t = Val(Text1) * 3600 + Val(Text2) * 60 + Val(Text3) start = True End If Timer1.En...

java如何判断一个线程结束线程结束时等待也就结束了 ------解决方案-------------------------------------------------------- waitforsingleobject当然可以。 或者设一全局变量,线程结束就将其置为...

Java如何判断线程池所有任务是否执行完毕import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Test { public static void main(String args[]) throws Interrupte...

怎么编这个程序编写一个程序只做成绩分类 program chengji; var a:array[1..1000]of real; i,j:longint; begin for i:=1to 1000 do read(a[i]); for i:=1to 999 do for j:=2to 1000 do if a[i]>a[j]th...

如何编写一个程序在开始之前,先你自已,想学什么方面,学到什么程度? 一般地话,建议你按几下顺序学: 先买本 谭浩强的 经典c 语言,学点语法 学的差不多了可以去学学数据结构 基本上学了以上两方面以后...

怎么编写一个倒计时的java的程序基于控制台的话很简单的,我跟你说一下大体思路吧,二话不说先来个for循环,然后输出倒计时的数字,程序睡一秒,在输出倒计时数字,如此循环,简单吧,下面看程序: public static void main(...

推荐阅读
图文推荐