关于ReentrantLock使用的疑问?

直接上代码:

import java.util.concurrent.locks.ReentrantLock;

public class MulThreadTest {
        public static int a = 0;

        ReentrantLock lock = new ReentrantLock(true);
        public void addInt(){
            lock.lock();
            a++;
            System.out.println(Thread.currentThread().getName()+"___________"+a +"_     " + lock.getHoldCount());
            lock.unlock();
        }
    public static void main(String[] args) throws InterruptedException {
            for(int i=0;i<3;i++){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        MulThreadTest test = new MulThreadTest();
                        for(int j=0;j<100;j++)
                            test.addInt();
                    }
                },"thread"+i).start();
            }
        }
     }

运行结果总会丢数字,难道是使用方法有问题?帮忙解答一下~

0

2个回答

你在每个线程里都建立了不同的text,也就是有三个不同的a在三个不同的test的实例里,这样改就可以了,三个线程访问的是同一个test实例,addInt也是针对同一个a,这样输出就可以看出lock的作用了


import java.util.concurrent.locks.ReentrantLock;

public class MulThreadTest {
        public static int a = 0;

        ReentrantLock lock = new ReentrantLock(true);
        public void addInt(){
            lock.lock();
            a++;
            System.out.println(Thread.currentThread().getName()+"___________"+a +"_     " + lock.getHoldCount());
            lock.unlock();
        }
    public static void main(String[] args) throws InterruptedException {
            final MulThreadTest test = new MulThreadTest();
            for(int i=0;i<3;i++){
                new Thread(new Runnable() {
                    @Override
                    public void run() {

                        for(int j=0;j<100;j++)
                            test.addInt();
                    }
                },"thread"+i).start();
            }
        }
     }
1
u013596119
DarthHaric 每个线程访问自己的对象就不存在synchronized的问题了
3 年多之前 回复
u013596119
DarthHaric 你new出来的是整个MulThreadTest,每个对象都有自己的a,a只是每个MulThreadTest实例的一个变量,我的代码里是只有一个对象,三个线程同时访问这一个对象的a,你的代码里是多个test,每个线程访问自己的test对象
3 年多之前 回复
zfy1355
~丹凤朝阳~ a是静态变量,new出的每一个对象都是共享a对象的,所以不存在多个a对象的
3 年多之前 回复

锁同步是针对共享数据的,多线程对共享变量访问时,会涉及到数据竞争问题。
你的代码的问题是每个线程中都新new了一个MulThreadTest对象,单线程中访问各自的数据,就不存在互斥访问的问题了。
就好比每个人家都有WC,每个人访问的是自己家的WC,那么就不可能存在竞争等待问题。但是如果是公共区域,共享的WC,那么就需要锁同步了。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ReentrantLock(重入锁)使用方式
ReentrantLock(重入锁)使用方式 心血来潮研究一下 BlockingQueue的实现原理,发现ArrayBlockingQueue的源码实现中应用到了ReentrantLock(重入锁)。 因此这里做一些简单记录。 ReentrantLock ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义。 + 但其添加了类似轮询...
Lock、Synchoronized和ReentrantLock的使用
Lock、Synchoronized和ReentrantLock的使用
ReentrantLock中tryLock的使用
请各位帮忙看看,以下是代码rn[code=java]rn static ReentrantLock lock = new ReentrantLock();rn rn public static void main(String[] args) rn ExecutorService es = Executors.newCachedThreadPool();rn rn es.execute(new Runnable() rn rn @Overridern public void run() rn foo("thread1");rn rn );rn rn es.execute(new Runnable() rn rn @Overridern public void run() rn foo("thread2");rn rn );rn rn rn private static void foo(String threadName) rn try rn lock.tryLock();rn System.out.println(lock.getHoldCount());rn System.out.println(threadName);rn try rn Thread.sleep(2000);rn catch (InterruptedException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn finally rn lock.unlock();rn System.out.println(lock.getHoldCount());rn rn rn[/code]rn输出信息是:rn1rnthread1rn(此处无等待)rn0rnthread2rn0rnException in thread "pool-1-thread-2" java.lang.IllegalMonitorStateExceptionrn at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:155)rn at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1260)rn at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:460)rn at test.reentrantlock.Test.foo(Test.java:43)rn at test.reentrantlock.Test.access$0(Test.java:31)rn at test.reentrantlock.Test$2.run(Test.java:26)rn at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)rn at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)rn at java.lang.Thread.run(Thread.java:722)rnrn为什么线程2会立刻获得锁,而且获得锁之后的HoldCount是0,最后抛出的异常是因为线程1准备释放锁时,它已经不是锁持有者了。
多线程编程之Lock(ReentrantLock)的使用
在多线程编程中,使用synchronized关键字实现线程的等待和通知,不能够通知特定的线程,所以不够灵活,所以java中还提供了另外一种锁 ReentrantLock(可重入锁),它配合Condition(对象监视器)使用可以实现特定线程的等待和唤醒。package ReentrantLock;import java.util.concurrent.locks.Condition; import
ReentrantLock的使用-高并发
1.  * 使用ReentrantLock可以代替Synchronized  * 需注意:必须手动释放锁(重要!!!!)  * 使用synchronized如果遇到异常,jvm会自动释放锁  * 当时lock会手动释放锁,因此经常在finally中进行锁的释放 2.  * 与Synchronized区别:  * 使用ReentrantLock可以进行尝试锁定 tryLock()  * 这样无...
【并发编程】ReentrantLock使用介绍
Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。java 5.0增加了一种新的机制:ReentrantLock,用以当内置枷锁机制不适用时,作为一种可选择的高级功能。        Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,下面来看Lock接口提供了哪些方法:public interface Lock {
使用ReentrantLock的一点小问题
问题产生: 最近使用 ReentrantLock 在批处理代码中的时候,发现应该更新的1000+条数据中,只有2条成功更新了,百思不得其解,后来查询日志得知报了一个错 IllegalMonitorStateException ,问了度娘,解释为当前的线程不是此对象监视器的所有者。也就是要在当前线程锁定对象,才能用锁定的对象此行这些方法,像notify(),notifyAll()方法了,导致某一个...
ReentrantLock的使用及注意事项
ReentrantLock的使用及注意事项
可重入锁ReentrantLock的使用
这两天抽了点时间看了关于ReentrantLock的博客,上一篇的就是其中一篇。自己看完也来复习一下先。ReentrantLock是一个可重入的互斥(独占)锁,又称为“独占锁”。ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSynchronized,是显示锁的关键)来实现锁的获取与释放。其可以完全替代synchronized关键字。JDK5.0早期,其性能远好...
多线程中ReentrantLock的使用
多线程中ReentrantLock的使用 一.使用ReentrantLock类     在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在jdk1.5中新增了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定,多路分支通知等功能,而且在使用上也比synchronized更加灵活。 1.1使用ReentrantLoc
使用ReentrantLock实现线程同步
在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如有嗅探锁定、多路分支通知等功能,而且在使用上也比synchronized更加灵活。下面以一个例子来说明ReentrantLock的使用。首先是Service类,需要被同步的类。import java.util.con
关于ReentrantLock类的解读
synchronized关键字提供了语言级别的并发支持,通过这个关键字,标明了可能会产生竞态代码的区域,这样多线程调用的时候就会保证同一时间只有  一个线程可以进入,消除了多线程的问题.  但是用synchronized关键字实现的并发是很重量级别的,因为没有获取到对应锁的线程会阻塞,如果要运行就需要调度,这会涉及到内核的  线程调度,这块的消耗是很大的,可能调度的时间会比你实际代码运行的时
关于os.popen的使用疑问
本人是初学者,在写程序时发现一个问题。rnrn1、像下面这样是通过fd.readline是可以获取信息的rn[code=Python]fd = popen('ifconfig')rntmp = fd.readline()[/code]rnrn2、像下面那样设置IP时是会出现错误的,但是我无法抓到这个错误信息。rn[code=Python]fd = popen('ifconfig eth0 255.255.255.255')rntmp = fd.readline()[/code]rnrn打印tmp是打不出来,readline和readlines也获取不到信息。rn大家有没有其他好的方法,在线等,解决后马上散分
关于使用MFC的疑问
我最近在使用MFC编游戏可是在MFC中的函数实在太多,哪位兄弟能伸出援助之手帮助小弟.(可以发给我MFC函数的使用手册)不胜感激!!
关于SetParent使用的疑问
如有10个form窗体,分别将form2~form10依次使用SetParent函数指定给form1中的picture,问:当指定下一个窗体时,上一个窗体是否仍然存在内存中(就好像被隐藏一样)?如果仍驻留内存,多次调用SetParent,会不会出现“内存泄露”现象(这个名词我不太理解)?又如何避免呀?先谢谢各位解答和帮忙!
关于内存使用的疑问
这是我在书上摘下来的:rnrna 的内容可以改变,如a[0]= ‘X’。指针p 指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。rnchar a[] = "hello";rna[0] = 'X';rncout << a << endl;rnchar *p = "world"; // 注意p 指向常量字符串rnp[0] = 'X'; // 编译器不能发现该错误rncout << p << endl;rnrn编译无错,程序运行出错。(p[0]='X';)rn疑问:为什么 a[0]="X"; 不出错,它不也是常量字符串吗?
关于volatile使用的疑问
读关于jmm的文章 [url]http://www.ibm.com/developerworks/cn/java/j-jtp03304/[/url]时,看到里面关于volatile的使用,说在新jmm下下列程序可以保证正确,既保证当thread A完成对volatile变量的写操作时,该赋值操作之前的操作已经完成,疑问:即使这样volatile的变量可以实时同步到主存被thread b看到,但Th...
关于物化视图使用的疑问
最近因为需求关系要弄一个物化视图,原本要将多行单列转为单行单列的表存在视图中,可是物化视图不支持group by跟rnrownum,因此没办法on commit来进行实时更新。rnrn于是想请教下,我如何在不修改语句的情况下达到实时更新这张视图?rn麻烦详细说明。。只有最后这点分了。这是我用来创建的SQL语句。rn物化视图日志也已经创建,主键设好了已经。rnrn[code=SQL]rn--物化视图创建rnCREATE MATERIALIZED VIEW MV_RFF rn BUILD IMMEDIATE rn AS rn SELECT MST_ID, TRANSLATE (LTRIM (TEXT, '/'), '*/', '*,') RESEARCHERLISTrn FROM (SELECT ROW_NUMBER () OVER (PARTITION BY MST_ID ORDER BY MST_ID,rn LVL DESC) RN,rn MST_ID, TEXTrn FROM (SELECT MST_ID, LEVEL LVL,rn SYS_CONNECT_BY_PATH (C1_1154_2,'/') TEXTrn FROM (SELECT MST_ID, C1_1154_2 AS C1_1154_2,rn ROW_NUMBER () OVER (PARTITION BY MST_ID ORDER BY MST_ID,C1_1154_2) Xrn FROM EDIFACT_SEG_RFFrn ORDER BY MST_ID, C1_1154_2) Arn CONNECT BY MST_ID = PRIOR MST_ID AND X - 1 = PRIOR X))rn WHERE RN = 1rnORDER BY MST_ID;rn[/code]
关于enable_shared_from_this的使用疑问
今天遇到一段代码 使用方式比较不常见 个人不太理解rn而且自以为可能有使用错误的可能 向各位请教 rn代码如下rn[code=c]rntemplaternclass Socket : public std::enable_shared_from_this rn/*rn这种使用enable_shared_from_this的方式正确么???rnclass Socket : public std::enable_shared_from_this //T另外处理rn*/rnrn //.....rnprivate:rn tcp::socket _socket; //boostrn MessageBuffer _readBuffer; // other classrnpublic:rn void ReadHandlerInternal(boost::system::error_code error, size_t transferredBytes)rn rn if (error)rn rn CloseSocket();rn return;rn rnrn _readBuffer.WriteCompleted(transferredBytes);rn ReadHandler();rn rn void AsyncReadWithCallback(void (T::*callback)(boost::system::error_code, std::size_t))rn rn if (!IsOpen())rn return;rnrn _readBuffer.Normalize();rn _readBuffer.EnsureFreeSpace();rn _socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),rn std::bind(callback, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));rn /*rn 这里能够理解 传入的是T的成员函数 所以指针也是shared_from_thisrn */rn rn void AsyncRead()rn rn if (!IsOpen())rn return;rnrn _readBuffer.Normalize();rn _readBuffer.EnsureFreeSpace();rn _socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),rn std::bind(&Socket::ReadHandlerInternal, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));rn /*rn 这里为什么不是传入Socket的指针rn */rn rnrn;rn[/code]
关于使用存储过程的疑问!
rn请问如何实现在SQL查询语句中调用存储过程,MSSQL有这样的支持吗?rnSelect text=(存储过程),ProductName From Memb_Productrnrn存储过程说明如下rnSp_GetProductInfo ID --int类型参数rnrn请各位帮帮忙,谢谢!
关于System.Windows.Forms.DataGrid的使用疑问
1、在DataGrid中,如何实现删除行的操作,是先在与DataGrid绑定的DataSource中删除行,然后再让DataGrid重新绑定到DataSource吗?rn2、DataGrid好像没有Refresh的功能,我想在DataSource发生改变后及时反映到DataGrid中,有什么办法能实现类似刷新DataGrid的功能?rnrn望高手支招。谢谢了。
关于共享内存使用的疑问
rn疑问有以下几点:rn1.由于共享内存不会随着进程的释放而释放,那么需要在进程的结尾使用shmdt断开共享内存连接吗?(PS:这里的进程指单进程而非多进程)rn2.共享内存伴随程序第二次运行,无法从共享内存中读取数据,本人使用的是固定的KEY来创建的内存,在进程结尾断开连接。rn 这样是否就意味着共享内存中的东西自动会消失?rn3.共享内存是否是主要运用于多线程中?rnrn之所以有以上几点疑问是因为在程序中运行共享内存结果不如意。废话不多说。直接上代码。rn/********************************************rn*rn* Name: shmcopy.crn*rn* Funtion:rn*rn*rn* Time:2014-10-09rn*rn********************************************/rnrn#include "fpfmipc.h"rn#include "ourhdr.h"rn#include rnrnint createfile( char* pathname );rnrnint main( int argc,char* argv[] )rnrn int filedes;rn int shmid;rn pid_t pid;rnrn /*** 自定义初始化共享内存结构 ****/rn databuf_s *buf1,*buf2; rn rn /*** 参数区控制 ***/rn if ( argc != 3 && argc != 2)rn rn usage(); //提示函数rn return -1;rn rn if ( argc == 3 )rn rn if ( filedes=createfile( argv[2] ) < 0 ) rn err_sys("createfile error");rn return -1;rn rn rn /* 创建并连接共享内存*/rn if ( shmid=getseg(&buf1) < 0 )rn rn err_sys("getseg error:"); rn return -1;rn rn rn /* 打开文件 */rn switch ( tolower(argv[1][0]) )rn rn case 'w':rn writer( buf1,filedes ); //将共享区数据中写入文件rn break;rn case 'r':rn reader( buf1,filedes ); //从文件中读取数据到共享区rn break;rn case 'd':rn shmctl( shmid ,IPC_RMID, 0 );rn printf("Remove Share Memory\n");rn default:rn usage();rn rn rn /** 断开连接 ****/rn if ( shmdt( (char*)buf1 ) < 0 )rn rn err_sys("shmdt error");rn return -1;rn rnrnrn/*******rn switch(pid=fork()) rn rn case -1:rn err_sys("fork");rn case 0:rn writer(semid,buf1,buf2);rn removeshm();rn break;rn default:rn reader(semid,buf1,buf2);rn break;rn rn****/rn exit(0);rnrnrn运行结果后 使用ipcs -am 中并没有显示新的share memory
关于[]的使用疑问?
#define LLDECODER_MAXNUMCH 8rnrn函数()rnunsigned int *m_pnScalableLSBs;rnm_pnScalableLSBs = new unsigned int [LLDECODER_MAXNUMCH];rnrnrn请问这个语句是什么意思?rn执行之后的结果怎么解释rn3x
关于使用开源项目的疑问
[b]第一次使用开源项目,下载下来以后解压有这样几个文件[/b]rnrn[img=https://img-bbs.csdn.net/upload/201610/10/1476089102_169742.png][/img][img=https://img-bbs.csdn.net/upload/201610/10/1476089112_79761.png][/img]rnrn[b][img=https://img-bbs.csdn.net/upload/201610/10/1476089207_24735.png][/img]然后在工程里包含了头文件#include "ICTCLAS50.h"[/b]rnrnrn[b]可是报了很多错误,要想调用接口都要提前做哪些设置呢? 还望赐教[/b]
关于Winsock使用的疑问。
我的目的是想通过Winsock控件,取得Http状态。在我的程序里有四个按钮,分别是“连接目标”、“生成head”、“发送内容”、“关闭连接”。如果是我逐个按钮去按的话,程序能正常取得目标服务器的http状态,可是当我添加一个按钮5,按下按钮5执行1-4按钮的click事件,就报错,无法取得http状态。请问如何处理。我的代码如下:rnrnDim ifCommand2 As BooleanrnPrivate arycon() As StringrnrnPrivate Sub Command1_Click() '连接到目标机器rn On Error GoTo LabelErrorrn Dim strHttp As String, strHost As Stringrn strHttp = UCase(Text3.Text)rn If Winsock1.State <> 0 Then Winsock1.Closern If Text3 <> "" Thenrn If Left(strHttp, 7) = "HTTP://" Thenrn strHttp = Right(strHttp, Len(strHttp) - 7)rn End Ifrn If InStr(1, strHttp, "/") > 0 Thenrn strHost = Left(strHttp, InStr(1, strHttp, "/") - 1)rn Elsern strHost = strHttprn End Ifrn rn If InStr(1, strHost, ":") Thenrn Winsock1.RemoteHost = Left(strHost, InStr(1, strHost, ":") - 1)rn Winsock1.RemotePort = Right(strHost, Len(strHost) - InStr(1, strHost, ":"))rn Elsern Winsock1.RemoteHost = strHostrn Winsock1.RemotePort = 80rn End Ifrn 'Debug.Print Winsock1.RemoteHostrn Winsock1.Connectrn Debug.Print Winsock1.Statern End Ifrn 'Debug.Print Winsock1.Statern Exit SubrnLabelError:rn MsgBox ErrorrnEnd SubrnrnPrivate Sub Command2_Click() '生成headrn Dim strHttp As Stringrn strHttp = Text3.Textrn Debug.Print Winsock1.Statern If Text3 <> "" Thenrn If UCase(Left(strHttp, 7)) = "HTTP://" Thenrn strHttp = Right(strHttp, Len(strHttp) - 7)rn End Ifrn SetSendData strHttprn End IfrnEnd SubrnrnPrivate Sub Command3_Click() '发送内容rn On Error Resume Nextrnrn Text1.Text = ""rn Debug.Print Winsock1.Statern Winsock1.SendData Text2.Textrn If Err <> 0 Then MsgBox Errorrn rn arycon = Split(Text1.Text, vbCrLf)rn 'Debug.Print arycon(0)rnEnd SubrnrnPrivate Sub Command4_Click() '关闭连接rn If Winsock1.State <> 0 Then Winsock1.ClosernEnd SubrnrnPrivate Sub Command5_Click() '执行就报错。rn Call Command1_Clickrn Call Command2_Clickrn Call Command3_Clickrn Call Command4_ClickrnEnd SubrnrnPrivate Sub Form_Load()rnCombo1.Text = Combo1.List(0)rnEnd SubrnrnPrivate Sub Form_Resize()rn On Error Resume Nextrn Text1.Width = Me.Width - 360rn Text2.Width = Me.Width - 360rn Text3.Width = Me.Width - 1400rn Image1.Width = Me.Widthrn Label4.Left = Me.Width - Label4.Width - 120rn rn Text1.Height = Image1.Top - Text1.Toprn Text3.Top = Image1.Top + Image1.Heightrn Label1.Top = Text3.Toprn Label2.Top = Label1.Top + Label1.Height + 120rn Combo1.Top = Label2.Toprn Command1.Top = Label2.Toprn Command2.Top = Label2.Toprn Command3.Top = Label2.Toprn Text2.Top = Label2.Top + Label2.Height + 120rn Text2.Height = Me.Height - Text2.Top - 400rn rnEnd SubrnrnPrivate Sub Text2_Change()rn If Left(Text2.Text, 4) = "POST" And ifCommand2 = False Thenrn endstr = vbCrLf + vbCrLfrn a = InStr(1, Text2.Text, endstr) + Len(endstr)rn If Text2.SelStart < a Then Exit Subrn ll = LenB(StrConv(Text2.Text, vbFromUnicode)) - a + 1rn length = "Content-Length: "rn b = InStr(1, Text2.Text, length) + Len(length)rn oldsel = Text2.SelStartrn ifCommand2 = Truern e = InStr(b, Text2.Text, vbCrLf) + 1rn rn Text2.SelStart = brn Text2.SelLength = e - brn Text2.SelText = CStr(ll) + vbCrLfrn Text2.SelStart = oldsel + Len(CStr(ll) + vbCrLf) - e + brn ifCommand2 = Falsern End IfrnEnd SubrnrnPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)rn Dim strData As Stringrn rn Winsock1.GetData strDatarn 'If Left(strData, 2) = vbCrLf Thenrn ' MsgBox strDatarn 'End Ifrnrn Text1.Text = Text1.Text + strDatarn 'Debug.Print Text1.Textrn arycon = Split(Text1.Text, vbCrLf)rn 'MsgBox strData, , Len(strData)rn rnEnd SubrnrnSub SetSendData(strData As String)rn ifCommand2 = Truern Dim strGet As Stringrn Text2.Text = Combo1.Text + " "rn If InStr(1, strData, "/") > 0 Thenrn strGet = Right(strData, Len(strData) - InStr(1, strData, "/") + 1)rn If InStr(1, strGet, ".") = 0 And Right(strGet, 1) <> "/" Then strGet = strGet + "/"rn Elsern strGet = "/"rnrn End Ifrnrn rn Text2.Text = Text2.Text + strGet + " HTTP/1.1" + vbCrLfrn Text2.Text = Text2.Text + "Accept: *.*"rn Text2.Text = Text2.Text + vbCrLf + "Accept-Language: zh-cn"rn Text2.Text = Text2.Text + vbCrLf + "Accept-Encoding: gzip , deflate"rn Text2.Text = Text2.Text + vbCrLf + "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"rn Text2.Text = Text2.Text + vbCrLf + "Host:" & Winsock1.RemoteHost & ":" & Winsock1.RemotePortrn If Combo1.Text = "POST" Thenrn Text2.Text = Text2.Text + vbCrLf + "Content-Type: application/x-www-form-urlencoded" + vbCrLf + "Content-Length: "rn rn End Ifrn Text2.Text = Text2.Text + vbCrLf + "Connection: Keep -Alive" + vbCrLf + vbCrLfrnifCommand2 = FalsernrnEnd Subrn
关于Combox的使用疑问!?
在使用Combox时,当将其属性改为droplist时,为它只能设置int型变量,而insideVC5++上介绍该变量时是CString型,不知缘由,请告知!rn谢谢!
关于strtok的使用疑问
我想按照rn" ' \ / ? * ( ) < > | @ ~ \t \n . : = & rn对字符串进行划分,但是有些就没有过滤掉,不知道怎么回事,rn以下是我的分割字符标记rnchar split_str[] = " \"()[]-\/\t\n,\:.\@=\?\\\'\~\<\>&;\*\|";rnrn
关于System.Diagnostics.PerformanceCounter的使用的疑问
我在对CPU使用时间上碰到问题:rnrnPC.NextValue();rn有Class B,rnClass Brnrn PC = new PerformanceCounter("Processor",rn "% Processor Time","_Total");rn public int nextValue;rn void abc()rn rn nextValue = PC.NextValue(); rn rnrn我在Class A中,引用了Class B,Class B中声明了一个PC对象rnClass Arnrn while ( true )rn rn b = new ClassB();rn int i = b.nextvalue; <-----------想每次获取PC的新值,但未如愿rn rnrnrn本意是不断地获取ClassB中 PC计数器的新值,事实上i每次的值都是0,没有获取rn连续值,请问该如何解决这个问题?
关于wsh的使用疑问
代码如下:rnSub GetServerInfo() 'Get Some information of Server rn Dim WshShell,WshSysEnvrn On Error Resume Nextrn Set WshShell=Server.CreateObject("Wscript.Shell")rn Set WshSysEnv=WshShell.Environment("SYSTEM")rnSeverOS=WshSysEnv("OS")rnServerCPUCount=WshSysEnv("NUMBER_OF_PROCESSORS")rnServerCPUDetail=WshSysEnv("PROCESSOR_IDENTIFIER")rnEnd Subrn。。。。。。rn<%GetServerInfo()%>rn服务器操作系统:<%=ServerOS%>rn服务器CPU个数:<%=ServerCPUCount%>rn服务器CPU ID:<%=ServerCPUDetail%>rnrn1、为何ServerOS的值为空,而ServerCpuCount和ServerCpuDetail有值?rn2.Server.CreateObject("Wscript.Shell") rnWscript.CreateObject("Wscript.Shell") '这是mscript中的描述rn这两个有什么区别?rnrn期待指点rn
关于使用A-GPS的疑问
最近在Android上搞定位服务相关的开发,了解到A-GPS可以辅助GPS进行快速定位并且提高了定位灵敏度,现在有几个问题想请教大家:rn1、如果设备支持A-GPS,使用时在应用层代码上是否要做特殊处理,还是在驱动和框架层已经实现,只要在requestLocationUpdates接口中选择使用LocationManager.GPS_PROVIDER就可以了?rn2、不管需不需要特殊处理,requestLocationUpdates选择LocationManager.GPS_PROVIDER后获得的位置坐标就是GPS+辅助位置服务器综合优化后的结果么?
关于 Bookmark的使用疑问?
为了修改数据,采用Bookmark方法,但发现没有达到效果:rn思路:rn先获取 选定数据的 标签:rn[code=VB]WIS_Search_MDB_Str = "Select * from TModuleList where ToolType ='" & Trim(Select_ToolInfo_ToolType) & "' and ItemName='" & Mid(Select_ToolInfo_ToolModule, 1, InStr(Select_ToolInfo_ToolModule, "@") - 1) & "'"rnSet WIS_Base_Rs = WIS_Base_Connect(WIS_Search_MDB_Str)rntem_BookMark = WIS_Base_Rs.Bookmark[/code]rnrn修改的时候,再将标签赋值给 数据库:rn[code=VB]WIS_Base_Rs.Bookmark = tem_BookMarkrnWith WIS_Base_Rsrn.Fields(1).Value = Trim(txtNewName.Text)rn.Fields(2).Value = Trim(txtAbbrName.Text)rn.Fields(3).Value = Mid(comType.Text, 1, 1)rn.Fields(4).Value = Trim(txtComment.Text)rn.Updatern.ClosernEnd With[/code]rnrn但是修改的并非所选定的 数据..而是其他的..rn能否帮忙看看什么地方出了问题?rn谢谢rn
关于GHOST使用的疑问
请问高手门,GHOST文件可以作再镜像吗?比如说,我安装了第一台电脑,安装完毕后,用GHOST作一个全盘镜像(1号),然后 用镜像盘(1号)安装了第二台电脑。现在,我在把第二台电脑同样作一个全盘镜像(2号)。但是我在用这个镜像盘(2号)装第三台电脑的时候,就出现问题了,我不知道为什么会这样。请大家给我讲一下吧。谢谢!
关于动态数组的使用疑问
程序中的动态数组的长度不停的在变化时,例如对于一个全局的动态数组Dynamic_Array,在Function1和Function2的长度是不一样的,例如分别是5和10,该如何申请长度,在每次申请以前是否要先释放掉前一个数组?rn 另外动态数组的释放,不同的书有不同的解释,如 Finalize(Dynamic_Array)、SetLength(Dynamic_Array,0)、Dynamic_Array:=nil; 究竟那种方法最可靠?rn
疑问:关于使用计数。
偶看Windows高级编程指南,rn里面提到rn“内核知道有多少个进程在使用某一内核对象的原因是每个对象都有一个使用计数。使用计数是所有内核对象都拥有的一个数据成员。当对象被创建时,它的使用计数被设为1。当另一进程也访问该对象时,它的使用计数被加1。当进程终结时,内核会自动地把该进程使用的所有内核对象的使用计数减1。当某一对象的使用计数变成0时,内核就释放该对象。”rn我想问的是:rn1、“对象被创建时,使用计数被设为1”为什么啊?仅仅是因为这个内核对象必须在一个进程或者线程里创建的吗?而由于这个创建它的进程或者线程的存在所以使用计数就是1么?rn2、“当进程终结时,内核会自动地把该进程使用的所有内核对象的使用计数减1。”rn这里的内核是指操作系统还是操作系统的Kernel.dll啊?rn3、内核、内核对象到底是什么概念?他们之间的关系以及他们和进程和线程的关系到底是怎样的呢?rn
关于类的使用疑问
请问一个类变量在使用前是否必须要创建?rn比如说rnfunction Add(client:TClientInfo):boolean;rnvarrn tmpClient:TClientInfo;rnbeginrn tmpClient := client; //这里使用对不对?是否一定要rn //运行tmpClient := TClientInfo.Create后才能用?rnend;
关于vector的使用疑问。
struct USERMESSrnrn int num;rn char name ;rn rn;rnvector userq;rnrn对于userq的使用必须要初始化吗?如何初始化?
可重入锁:ReentrantLock理解使用
(一)可重入性 可重入性描述这样的一个问题:一个线程在持有一个锁的时候,它内部能否再次(多次)申请该锁。如果一个线程已经获得了锁,其内部还可以多次申请该锁成功。那么我们就称该锁为可重入锁。通过以下伪代码说明: void methodA(){ lock.lock(); // 获取锁 methodB(); lock.unlock() // 释放锁 } void met...
多线程-ReentrantLock的原理以及使用
/** * 两个线程之间通信根据不同的条件进行不同的通信 * 1.await()其他程阻塞,要是当前线程向下执行,那么其他的线程必须唤醒它本身,这样当前线程才可以继续向下执行 * 2.signal()唤醒当前线程 */ public class Main { static class NumberWrapper { public int value = 1; ...
ReentrantLock笔记(一) -- 基本使用
ReentranLock基本使用 交替输出 ReentrantLock lock = new ReentrantLock(true);//true为公平锁,false或缺省为非公平锁 Runnable r = () -&amp;amp;amp;amp;gt; { while (!Thread.currentThread().isInterrupted()) { lock.lock(); ...
ReentrantLock可重入锁使用及原理
使用场景:https://www.cnblogs.com/XJJD/p/8758713.html 原理实现:https://blog.csdn.net/weixin_39910081/article/details/80147754
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图