以下代码,semaphore会不会引起一些同步的问题(重入),需要修改吗

[code="java"]
package learn;
import java.util.concurrent.Semaphore;
class applePlate{
static Semaphore apple = new Semaphore(2);
static Semaphore space = new Semaphore(3);
}

class Eater implements Runnable{
String name;
Object o;
Eater(String name, Object o){
this.name = name;
this.o = o;
}
public void run(){
int count = 4;
while(count-- > 0){

            try{
                applePlate.apple.acquire();
            }catch(InterruptedException e){
                throw new RuntimeException(e);
            }
            applePlate.space.release();
            System.out.println("Eater " + name +" eat"+"   :left " 
                    + applePlate.apple.availablePermits());

    }
}

}

class Producer implements Runnable{
String name;
Object o;
Producer(String name, Object o){
this.name = name;
this.o = o;
}

public void run(){
    int count = 3;
    while(count-- > 0){

            try{
                applePlate.space.acquire();
            }catch(InterruptedException e){
                throw new RuntimeException(e);
            }
            applePlate.apple.release();
            System.out.println("Producer " + name +" produce"+"   :left " 
                    + applePlate.apple.availablePermits());

    }
}

}

class Go {
public static void main(String args[]){
Object o = new Object();
Eater e1 = new Eater("eee", o), e2 = new Eater("eee2", o);
Producer p1 = new Producer("ppp", o), p2 = new Producer("ppp2", o);
Thread th1 = new Thread(e1);
Thread th2 = new Thread(e2);
Thread th3 = new Thread(p1);
Thread th4 = new Thread(p2);
th1.start();
th2.start();
th3.start();
th4.start();
}
}
[/code]

2个回答

信号量只是在信号不够的时候挂起线程,但是并不能保证信号量足够的时候获取对象和返还对象是线程安全的。所以你还需要有Lock来保证并发的正确性。

odmedabs
odmedabs 所以用Semaphore的话尽量都用Semaphore,和线程锁混用会有麻烦的
6 年多之前 回复
odmedabs
odmedabs 个人觉得声明一个Semaphore mutex值为0,1,比较好,,如果是Lock的话可能死锁。。 比如Th1 lock.lock(); sem.acquire(); lock.unlock(),另外一个地方Th2 是lock.lock(); sem.release(); lock.unlock();注意到如果Th1先被调度,程序阻塞在sem.acquire(),并不释放lock,那么Th2不会获得lock锁,永远不会发生sem.release()
6 年多之前 回复

"并不能保证信号量足够的时候获取对象和返还对象是线程安全的" 这是哪家的Java Doc声明的?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
这样的代码会不会引起内存泄漏
[code=c]rn#includernusing namespace std;rnint *test_plus(const int *a,int a_num,const int *b,int b_num)rn rn int num=a_num+b_num;rn int *pt=new int[num];rn for(int i=0;i
多线称 需要重入的问题
原来写多线的时候,因为水平原因。 一般在共享资源的时候 采用互斥来控制。rnrn现在我想到了一个问题。 函数重入的问题。rnrn假设 class a 有 A Brn两个对象rnrn在A B 的c( int ) 方法中rn采用了rnclass a::c(int m)rnrn int a = m+100;rn ...rn...rn...rnrnrnrn如果2个线称同时进入这个函数 就会出现重入的问题rnrnA.c(100);rnB.c(200);rnrn两者的数据是否会被相互污染。我不太确定。 如果是的话rn那就需要 int *a = new int;rn*a = m+100rnrn到最后再delete 掉?rnrn
以下代码有需要修改的地方不
package salary;nn/**n * 薪酬标准n * n * @author 吴家骏n * n */npublic class SalaryStandard nn /** 管理的工资 */n private double ManagedPayroll;nn /** 销售的工资 */n private double SalesWage;nn /** 技术的工资 */n private double TechnicalSalary;n n /** 行政的工资 */n private double ExecutivePay;nn /** 公司总利润 */n @SuppressWarnings("unused")n private double GrossProfitOfCompany;nn /** 回款奖励 */n private double CashReward;nn /** 业务利润提成 */n private double BusinessProfitRoyalty;nn /** 技术人员加班提成 */n private double OvertimePay;nn /**n * 技术人员加班费 day 加班的天数 level 技术人员级别n */n private double OPay(int day, int level) n if (day != 0) n switch (level) n case 1:n this.OvertimePay = day * 150;n break;n case 2:n this.OvertimePay = day * 100;n break;n case 3:n this.OvertimePay = day * 50;n n else n this.OvertimePay = 0;n n return this.OvertimePay;n nn /**n * 回款规则 .NoOfDay :为回款的天数n */n private double PaymentRules(int NoOfDay, double BProfit) n if (NoOfDay < 30) n this.CashReward = 0.005 * BProfit;n else if (NoOfDay >= 30 && NoOfDay < 45) n this.CashReward = 0.002 * BProfit;n else if (NoOfDay >= 60) n this.CashReward = -0.002 * BProfit;n n return this.CashReward;n nn /**n * 业务利润提成 .BProfit 业务所得利润n */n private double Commission(double BProfit) n if (BProfit <= 1000000) n this.BusinessProfitRoyalty = 0.02 * BProfit;n else if (BProfit > 1000000 && BProfit <= 5000000) n this.BusinessProfitRoyalty = 0.035 * BProfit;n else if (BProfit > 5000000) n this.BusinessProfitRoyalty = 0.055 * BProfit;n n return this.BusinessProfitRoyalty;n nn /**n * 部门经理的工资标准n * n * GrossProfitOfCompany 公司利润n * n * ManagerNum 经理人数n * 既1级部门有几个部门经理,2级部门有几个部门经理,3级部门有几个部门经理n */n public double ManagerSalary(int level, double GrossProfitOfCompany , int ManagerNum) n switch (level) n case 1:n this.ManagedPayroll = 9000 * 12 + GrossProfitOfCompany * 0.04 / 3 / ManagerNum;n break;n case 2:n this.ManagedPayroll = 8000 * 12 + GrossProfitOfCompany * 0.04 / 3 / ManagerNum;n break;n case 3:n this.ManagedPayroll = 7000 * 12 + GrossProfitOfCompany * 0.04 / 3 / ManagerNum;n n return this.ManagedPayroll;n nn /**n * 销售部人员的工资标准 .分级别: 1级为销售部副经理, 2级为销售部员工, 3级为销售部试用期员工 NoOfDay 回款天数 BProfitn * 业务所得利润n */n public double SalesSalary(int level, int NoOfDay, double BProfit) n if (level == 3) n this.SalesWage = 2000 + this.PaymentRules(NoOfDay, BProfit)n + this.Commission(BProfit);n else n switch (level) n case 1:n this.SalesWage = 3000 + this.PaymentRules(NoOfDay, BProfit)n + this.Commission(BProfit);n break;n case 2:n this.SalesWage = 2200 + this.PaymentRules(NoOfDay, BProfit)n + this.Commission(BProfit);n n n return this.SalesWage;n nn /**n * 技术人员工资标准 level 技术人员级别:1级为高级工程师 ,2级为中级工程师 , 3级为初级技术人员 day 加工天数n */n public double engineer(int level, int day) n switch (level) n case 1:n this.TechnicalSalary = 15000 + this.OPay(day, level);n break;n case 2:n this.TechnicalSalary = 10000 + this.OPay(day, level);n break;n case 3:n this.TechnicalSalary = 5000 + this.OPay(day, level);n nn return this.TechnicalSalary;n nn /**n * 行政人员工资标准n * n * level 行政人员等级n * 1级为行政副经理,2级为行政人员,3为试用期人员n *n */n public double AdminiSalary( int level )n switch(level)n case 1:n this.ExecutivePay = 2300;n case 2:n this.ExecutivePay = 2000;n case 3:n this.ExecutivePay = 2000 * 0.8;n n return this.ExecutivePay;n nnn
共享内存需要同步吗
用CreateFileMapping创建的共享内存在不同进程中访问,需要同步吗,谢谢
同步之Semaphore信号量
    基于Semaphore的特点,如果将信号量初始化为1,使得它在使用时最多只有一个可用的许可,从而可用作一个相互排斥的锁。     下面将使用Semaphore来实现买票的例子,可参考《同步之synchronized关键字》以了解该问题。package com.gk.thread.mutex.semaphore; import java.util.concurrent.Semaphore;...
需要同步吗
由于这几张表读取的非常频繁。于是便相对第一次查询的结果进行缓存。如果缓存中没有相应的数据再从数据库中读取。 现的问题,这个方法上要不要考滤同步的问题。 我是这样想的。当同一时刻有多个用户同时查询相同的数据时。此时要查询的数据刚好在缓存中没有。那么这时要从数据库中读取。 假设A查询时执行的到的代码为:List conInfoList = new ArrayList(); 而B查询执行到代码为:if(pageConInfoMap.get(riskCode + comCode) != null) 那么现在的问题是A将结果查询出放入缓存。而B又一次将结果查询出放入缓存中。缓存用的是map不会产生重复记录的情况。 但是本来要查询一次数据库,其它的都要从缓存中读取。可是假设的情况却读了两次,在实际运行中,有可不只是两次。所以说我是否应当要取读数据进行缓存的方法设为同步呢。rn 代码如下:rn 已经将其设为同步的rnrn  说明此方法是在jsp页面中直接调用的rn  
同步工具类之Semaphore 信号量
     Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。      Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用了。另外等待的5个人...
同步计数器·Semaphore
一. Semaphore又称信号量,是操作系统中的一个概念,在Java并发编程中,信号量控制的是线程并发的数量。 Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。  ...
下面代码会不会引起脏读,幻像读
请问大家一个问题:rn Java或c#语言中,同一个方法中123共有三处执行数据库操作,按字母顺序排列,并且处于同一事务,事务是由框架来处理,1是insert,2是sele,3是update 操作。rnA)目的:1插入记录后,2进行查询1插入的数据,通过3对业务数据进行更新。rnrnB)结果:1插入成功了,2没有查询到1插入的数据返回0,以至3未能将1处的数据更新到数据库而更新为0? rnrnC)问题:为什么1插入成功了,2没有查询到? 除了网络原因还有什么原因?若是网络因为那又在什么特殊情况下才发生?Java执行按123顺序,而在执行过程中,1插入的速度比2查询的速度要慢,而时间又要得久些,这种问题会存在吗?rnD)代码:rn下面代码会不会引起脏读,幻像读?rnpublic void saveByList(String fphm, List list,rn ShuiLuZhuangXieJiHuaManager slzxJiHuaManager,VmtclcmzManager vxmdManager) rn XiaoMaDanMxExample example = new XiaoMaDanMxExample();rn example.createCriteria().andFPHMEqualTo(fphm);rn this.xiaoMaDanMxDAOImpl.deleteByExample(example);rnrn for (XiaoMaDanMx auth : list) rn this.xiaoMaDanMxDAOImpl.insert(auth);//注释:这里是第一处插入 rn rn HashMap zxjhd_map = new HashMap();rn zxjhd_map.put("zxjhdfph", auth.getZXDPH());rn zxjhd_map.put("zxjhdfphm",auth.getZXDH());rn HashMap vzxjhd_map = vxmdManager.getSlokAndSl2ok(zxjhd_map);//注释:这里是第二处查询 rn System.out.println("查询水陆装卸计划单: p1:"+vzxjhd_map.get("SL1") +" p2: "+ vzxjhd_map.get("SL1")+" ph: "+auth.getZXDPH()+" fphm "+auth.getZXDH());rn HashMap map = new HashMap();rn map.put("p1", vzxjhd_map.get("SL1"));rn map.put("p2", vzxjhd_map.get("SL2"));rn map.put("ph", auth.getZXDPH());rn map.put("fphm",auth.getZXDH());rn slzxJiHuaManager.UpdateSlAndZlByPHAndFphm(map);//注释:这里是第三处更新rn rn HashMap mtzytb_map = new HashMap();rn mtzytb_map.put("mtzytbfphm", auth.getZXTZDH());rn mtzytb_map.put("mtzytbph",auth.getZXTZDPH());rn HashMap vmtzytb_map = vxmdManager.getSlokAndSl2ok(mtzytb_map);rn System.out.println("查询码头作业单填报: p1:"+vmtzytb_map.get("SL1") +" p2: "+ vmtzytb_map.get("SL2")+" ph: "+auth.getZXTZDH()+" fphm "+auth.getZXTZDPH());rn rn rn HashMap tb_map = new HashMap();rn tb_map.put("p1", vmtzytb_map.get("SL1"));rn tb_map.put("p2", vmtzytb_map.get("SL2"));rn tb_map.put("fphm", auth.getZXTZDH());rn tb_map.put("ph",auth.getZXTZDPH());rn this.mtzxzydtbManager.UpdateSlAndZlByPHAndFphm(tb_map);rnrn
谁需要以下代码?
找到一个pb写的扫雷游戏,纯pb代码,有谁需要的?rn请至www.smiling.com.cn中的“pb工作室”去下载
MapTree会不会引起内存泄露?
程序中,把每个客户端的链接保存在一个MapTree中,因为客户端自发链接服务器的,客户端 socket登录时会发送登录数据包括socket的Id,当客户端连接上服务器后,我以socket的ID为KEY把socket保存在MapTree里。rn因为其他原因socket会重复登录服务器,当重复登录时,我就把之前的链接maptree.get(soketId).close()掉,在重新maptree.put(soketId,newSoket)。不知道这样做会不会产生内存泄露??rnrn之前看了一篇文章rnrnhttp://www.360doc.com/content/06/0327/13/2689_86856.shtmlrnrnrn望各位大牛指点。
一、Java多线程并发同步之Semaphore
一、多线程并发同步之Semaphore 概念 Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,用来管理资源,以保证它们能够正确、合理的使用公共资源的设施,也是操作系统中用于控制进程同步互斥的量。用我们常见的说法就是用来控制并发数。 信号量是一个非负整数 。 业务场景 以售票窗口买票为例,假设火车站有两个售票窗口,一开始两个窗口都是没有人的,这是同时来了10个人买票,每次只...
Semaphore -- 同步辅助类3
可以控制某个资源可被同时访问的个数,通过构造函数设定一定数量的许 可,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许 可。 用法介绍:package com.grace527.test;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
以下代码如何修改
//增加一列选择框rnds.Tables["客户资料"].Columns.Add("选择");rnds.Tables["客户资料"].Columns["选择"].GetType=bool;rn以上我想在原来的表上增加一列可以选择的列,但是我的代码有误,请高人帮忙修改,非常感谢.
我的以下代码会不会存在内存泄露?
private void timer1_Tick(object sender, EventArgs e)rn rn i++;rn this.listBox1.Items.Add(DateTime.Now.ToString());rn this.listBox1.SelectedIndex = listBox1.Items.Count - 1;rn if (listBox1.Items.Count > 100)rn rn listBox1.Items.Clear();rn listBox1.Dispose();srn rn this.textBox1.Text = i.ToString();rn rnrntimer1定时器是1秒钟执行10次!
以下代码有意义吗
int ival=1.01;rnconst int &*p=&ival ;rnrn
以下代码不对吗?
String tablename;rn if(var.equals("card"))rn rn tablename="cardtype";rn rn rn out.write(tablename);rn sql="select * from "+tablename;rn ResultSet rs=stmt.executeQuery(sql);rn out.write(sql)rn我在if外定义的变量怎么输入tablename时没有值!只有把输出语句放在if里才有用!
以下会不会出错?
main() rn rnchar* p="Hello"; rnprintf("%s",p); rn*p='w'; rn printf("%s",p); rn rn
java同步例子之信号量(Semaphore)
信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。 [code=&quot;java&quot;]package concurrent; import java.util.Collections; import java.util.HashSet; import java.util.S...
udp发包需要同步吗?
多线程下,TCP发送信息是需要同步的。现在我使用的是UDP,想请问UDP在多线程使用的时候,是否需要对它的发包进行同步呢?不做同步的话,会出问题吗?
bool变量需要同步吗
多线程中,rn经常看到用一个bool变量来标识该别一个大数据变量是否正在被另一线程使用rn有点疑惑:bool变量本身不需要同步吗?
这个类需要同步吗?
package ris_server;rnrnimport java.util.*;rnrnfinal public class Parsernrn public static Parse m_parse = new Parse();rnrn public int parseType( String strAim )throws Exceptionrn String strTmp = strAim;rn strTmp = strTmp.substring(strTmp.indexOf("|")+1, strTmp.length() );rn return Integer.valueOf( rn strTmp.substring(0,strTmp.indexOf("|")) rn ).intValue();rn rnrnrnrn这个类主要提供整个系统的消息解析工作,他的访问量十分高,而且牵扯到多线程。rn整个系统都会使用 m_parse 这个静态的对象,此类需要同步吗? rn请说明原因!rn谢谢
connect函数需要同步吗
rn多线程调用connect函数的情况下,是否需要用同步机制(如互斥锁方式)?rnrn谢谢!
bool变量需要同步吗?
两个线程 A读 B写 bool 变量rn我的要求 bool 开始为 falsernrnA循环读bool变量 若变量为true A就结束([color=#FF0000]可以延迟一点,不要求特别精确的立即结束[/color])rnB只写变量一次 就是 让变量为 truernrn问题是 不同步的话 A刚判断完变量 变量就变了 这个不要紧rnrn[color=#FF0000]我关心的是B会失败吗 会不会每次正好和A冲突 无法置变量为true??rn有这种可能没??[/color]
JAVA同步工具类——Semaphore信号量
信号量 计数信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量; Semaphore管理着一组虚拟许可(permit),许可的初始数量可通过构造函数来指定;在执行操作时先获取许可(只要还有剩余的许可),使用完成后释放许可;如果没有许可那么acquire将阻塞直到有许可(或者被中断或操作超时);release方法将返回一个许可给信号量...
[闭锁]同步工具类 Semaphore 的使用
通过Semaphore控制流量 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; /** * 通过Semaphore控制流...
多线程 socket 需要同步吗?
int retrnsockaddr_in addr;rnaddr.sin_family = AF_INET;rnaddr.sin_port = htons(82);rnaddr.sin_addr.S_un.S_addr = INADDR_ANY;rnret = bind(server_sk,(sockaddr*)&addr,sizeof(addr));rnret = listen(server_sk,2);rnSOCKET s = accept(server_sk,NULL,NULL);rnrn通过以上代码我得到s(SOCKET),我想在多个线程中使用,是否会产生资源冲突,是否需要在代码中实现同步(Synchronization)。rnrn请赐教!!!
这种情况需要同步吗?
全局变量,两个线程共享rn线程A负责将数据写入全局变量rn线程B负责将数据从全局变量检测到有新数据就读出显示出来rn我问它们两个线程的运行需要同步吗?rn当线程A写入1,2,3,4rn这个时候线程B去读到1,2,3rn这个时候线程A再写入5,6,7rn然后线程B继续显示会是4吧rn我再想这个时候需要为对全局变量的访问设置互斥吗?
java5的Semaphore同步工具简单实例
package cn.tool;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class SemaphoneTest { /** *Semaphone可以维护当前访问自身的线
java并发之同步辅助类semaphore
semaphore(seməˌfôr)含义: 信号量就是可以声明多把锁(包括一把锁:此时为互斥信号量)。 举个例子:一个房间如果只能容纳5个人,多出来的人必须在门外面等着。如何去做呢?一个解决办法就是:房间外面挂着五把钥匙,每进去一个人就取走一把钥匙,没有钥匙的不能进入该房间而是在外面等待。每出来一个人就把钥匙放回原处以方便别人再次进入。 常用方法 acquire():获取信号量,信号...
Java并发编程-同步辅助类之Semaphore
信号量Semaphore是一个计数信号量,用来保护一个或多个共享资源的访问,是Java Concurrent包下提供的另一种同步方式。Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Semaphore实现的功能就类似厕所有5个坑,假如有10
GC会不会引起线程减少?
会的 如果一个应用频繁GC,发生stop world,可能会影响IO线程的正常响应,进而导致502问题,IO线程业务中断销毁 进而导致线程数据减少 这是个分析问题的了思路 具体没有实测,只是记录一下思路。 ...
不晓得这个问题会不会引起公愤?
visual c++会不会很快被的淘汰??
这样会不会引起BDE冲突??
客户系统上原来安装有较低版本的BDE,并有相关应用软件使用该BDE。我现在基于BCB 6.0开发了一个使用新版BDE的程序,并将要放到客户系统上使用。请问,使用我的程序时,是否要升级原来较低版本的BDE到我的开发版本?如果升级的话,原来使用低版本的软件是否会出问题??
如何避免代码重入?
比如在定时器和别的中断例程里都使用了同样的函数
请问_bstr_t会不会引起内存泄漏?
我的程序有时会出内存错误,不知道问题在哪里。但每次出错总是在一个_bstr_t类型的变量赋值时出错,不知道会不会是_bstr_t引起的内存泄漏?
Thread.stop引起同步异常问题的代码样例
Why is Thread.stop deprecated? 因为它本身就是不安全的。停止一个线程引起它释放了它所有的锁的监控。 (死亡线程的被锁的监控上的异常在堆栈传播)。如有任何以前被这些所锁保护的对象将处于不一致的状态,其他线程现在可以看到不一致的状态。这类对象可以认定是被破坏的。当线程操作被破坏的对象时,可能引发任何结果。此现象可能是微妙和难以察觉,也可以显着。不同于其他为检查的例外, ...
以下问题需要解决
1.7z软件安装 2.ftp服务开启 3.uname –a查询到的内核版本号 4.df –H和df –i查询到的硬盘占用情况 5.通过top –n -1查询到的CPU占用情况 6.通过netstat –nr和netstat –na查询到的端口占用情况 7.怎么查看每一个目录的大小(du -sm 目录名,或者du -sk 目录名) 8.怎么查看linux中端口占用历史记录 融合计...
重入
当我频繁的打开、读取文件时,运行时会出现错误,高手教我“这是重入造成”,于是有了很多sleep(200),但我对这个概念一直不很理解,请老师们讲讲:rn1、什么是重入?rn2、为什么重入会产生错误?rn3、为什么会出现重入(或在什么情况下会发生重入)?rn4、(可能无关,也许有关,但我想知道)重入DOS的问题。rn5、什么是可重入马(reentrant code)?rn越仔细越好, 我会不断加分。
求助修改以下VB代码...........................................................
求助修改以下VB代码,替换系统的Listview控件。rn[code=VB]rn'问题是:把Lw1控件使用到Listview1代码里,就是替换意思。rn'这个自定义控件的使用方法rnLw1.AddHeaderItem "列表头" & 0, 100, , Src1rnLw1.AddHeaderItem "列表头" & 1, 100, , Src2rnLw1.AddHeaderItem "列表头" & 2, 100, , Src3rn For i = 0 To 10rn Lw1.AddListItem "列表项" & i, Src1, Src2rn Lw1.AddListSubItem i, "列表项" & i & "子项目1", Src2rn Lw1.AddListSubItem i, "列表项" & i & "子项目2", Src3rnrn'以下是系统Listview控件代码。rnPublic Sub ShowPagedDocs(ByVal intCurPage As Integer, ByVal intPageSize As Integer)rn Dim docs As New Collectionrn Dim result As New PDMPageUtilrn Set result = bussiness.GetPagedDocument(intCurPage, intPageSize)rn Set docs = result.Datarn lvDocsList.ListItems.Clearrn Dim doc As Documentrn Dim li As ListItemrn For Each doc In docsrn Set li = Listview1.ListItems.Add(, , CStr(doc.docId))rn li.ListSubItems.Add , , doc.DocNorn li.ListSubItems.Add , , doc.DocNamern li.ListSubItems.Add , , doc.docFileNamern li.ListSubItems.Add , , doc.DocFileTypern li.ListSubItems.Add , , doc.DocFileVersionrn li.ListSubItems.Add , , CStr(doc.DocCreateDate)rn li.ListSubItems.Add , , doc.DocDesignerrn li.ListSubItems.Add , , doc.DocCorrecterrn li.ListSubItems.Add , , doc.DocAuditerrn Nextrn Set doc = Nothingrn Set docs = Nothingrn SetPageInfo resultrnEnd Subrn[/code]
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数