小编roa*_*oul的帖子

为什么ArrayList在从多个线程修改时不会抛出ConcurrentModificationException?

ConcurrentModificationException:当不允许此类修改时,检测到并发修改对象的方法可能抛出此异常.

以上是来自javadoc的ConcurrentModificationException定义.

所以我尝试测试下面的代码:

final List<String> tickets = new ArrayList<String>(100000);
for (int i = 0; i < 100000; i++) {
    tickets.add("ticket NO," + i);
}
for (int i = 0; i < 10; i++) {
    Thread salethread = new Thread() {
        public void run() {
            while (tickets.size() > 0) {
                tickets.remove(0);
                System.out.println(Thread.currentThread().getId()+"Remove 0");
            }
        }
    };
    salethread.start();
}
Run Code Online (Sandbox Code Playgroud)

代码很简单.10个线程从arraylist对象中删除元素.确保多个线程访问一个对象.但它运行正常.没有异常被抛出.为什么?

java multithreading arraylist thread-safety

3
推荐指数
1
解决办法
1700
查看次数

转换Expression和Delegate之间的错误

我们可以写下面的代码:

 Func<string, string> func = x => x + x;
Run Code Online (Sandbox Code Playgroud)

我们也可以写:

 Expression<Func<string, string>> exp = x => x + x;
Run Code Online (Sandbox Code Playgroud)

但是当我写道:

Expression<Func<string, string>> exp = func;
Run Code Online (Sandbox Code Playgroud)

编译器抛出一个错误:

无法将类型'System.Func'隐式转换为'System.Linq.Expressions.Expression>'

所以我改变代码如下:

  Expression<Func<string, string>> exp = (Expression<Func<string, string>>)func;
Run Code Online (Sandbox Code Playgroud)

和以前一样的错误.

那么什么是真正的类型x => x + x;,Expression和Delegate/Lambda Expression之间的关系是什么?

c# lambda delegates expression expression-trees

3
推荐指数
1
解决办法
131
查看次数

书上的AF#例子,但我甚至无法编译它

我正在阅读"Beginning F#"这本书,有一个简短的示例代码列表,用于演示如下的惰性评估:

lazyValue = lazy ( 2 + 2 )
let actualValue = Lazy.force lazyValue
printfn "%i" actualValue
Run Code Online (Sandbox Code Playgroud)

这似乎很容易,但是对我来说有一个错误,比如功能力没有定义???

我很困惑.从msdn搜索,似乎没有答案.

谁能告诉我发生了什么?

f#

2
推荐指数
1
解决办法
225
查看次数

C# 中 ObjectIDGenerator 方法的值类型

对引用类型调用两次 ObjectIDGenerator 方法,id 值相同。

test a = new test();//reference type
bool isFirstTime;
ObjectIDGenerator IDGenerator = new ObjectIDGenerator();
long theID = IDGenerator.GetId(a, out isFirstTime);
Console.WriteLine(theID);
Console.WriteLine(isFirstTime);

theID = IDGenerator.GetId(a, out isFirstTime);
Console.WriteLine(theID);
Console.WriteLine(isFirstTime);
Run Code Online (Sandbox Code Playgroud)

输出如下:
1
True
1
False

对象“a”只有一个 ID。

但是当在值类型上调用 ObjectIDGenerator 方法时,事情看起来很奇怪。

int a = 100;//value type
bool isFirstTime;
ObjectIDGenerator IDGenerator = new ObjectIDGenerator();
long theID = IDGenerator.GetId(a, out isFirstTime);
Console.WriteLine(theID);
Console.WriteLine(isFirstTime);

theID = IDGenerator.GetId(a, out isFirstTime);
Console.WriteLine(theID);
Console.WriteLine(isFirstTime);
Run Code Online (Sandbox Code Playgroud)

输出:
1

2

这就是为什么?

c# value-type

2
推荐指数
1
解决办法
1711
查看次数

如何使用 C# 创建 gif 图像

我想创建一个包含多个帧的 gif 文件。我想使用微软支持的方法——Image.SaveAdd

但是我不知道如何设置EncoderParameters Paramater 来组成一个gif 文件。

我找不到可以参考的文件。那么如何创建一个gif文件Image.SaveAdd

c# gdi+ gdi gif

2
推荐指数
1
解决办法
3745
查看次数

Task.WaitAll方法(Task [],Int32)在过期时不释放该线程

Task.WaitAll方法(Task [],Int32)在过期时不释放该线程.

我正在使用.NET framework 4.0.我发现Task.WaitAll方法在它过期时仍占用线程.

我在下面编写代码来测试它.

static void Main(string[] args)
        {
            printThreadCount("start");
            Task[] tasks = new Task[5];
            for (int i = 0; i < 5; i++)//create tasks
            {
                Task t = new Task(() =>
                {
                    Thread.Sleep(30000);
                    Console.WriteLine(DateTime.Now.ToString() + "task finish");
                }
               );

               tasks[i] = t;
            }

            for (int i = 0; i < 5; i++)
            {
                tasks[i].Start();//start 1 task per second
                Thread.Sleep(1000);
                printThreadCount("start 1 task per second");
            }

            printThreadCount("before waitall");
            Task.WaitAll(tasks, 10000);

            printThreadCount("after waitall 10s");
            Thread.Sleep(5000);
            printThreadCount("sleep 5s");
            Thread.Sleep(5000);
            printThreadCount("sleep …
Run Code Online (Sandbox Code Playgroud)

c# clr multithreading threadpool task-parallel-library

2
推荐指数
1
解决办法
1151
查看次数

如何更改CSS优先级(不要使用!important)

如果css如下:

input[type="text"]
{
     border: 1px solid green; 
}

.text
{
     border: 1px solid red ; 
}
Run Code Online (Sandbox Code Playgroud)

如果html如下:

<div>
 <input type="text" class="text"/>
</div>?
Run Code Online (Sandbox Code Playgroud)

border-color文本框的是绿色的.似乎"元素"具有更高的优先级.
如何使.class有效?是否必须使用!important

还有其他选择吗?


我测试了下面的CSS代码:

input[type="text"]
{
     border: 1px solid green; 
}

input[type="text"] .text
{
     border: 1px solid red; 
}
Run Code Online (Sandbox Code Playgroud)

HTML代码:

<div>
     <input type="text" class="text"/>
</div>
Run Code Online (Sandbox Code Playgroud)

猜猜怎么着?

还是绿的.

删除'input [type ="text"] .text'中的空格,它变为输入[type ="text"].text.没关系.边框颜色为红色.

css

1
推荐指数
1
解决办法
6779
查看次数

Sqlite日期时间类型问题

我尝试从Java插入一个日期时间到sqlite数据库,但事情很奇怪.

当我使用代码Calendar.getInstance().getTime()插入时,表中的值是(例如)1359960520718.当我使用字符串2010-01-01插入表时,值是正常的:2010-01-01.

但是当我使用字符串2010-21-51插入表中时,表中的值是2010-21-51.这是一个无效的日期.它出什么问题了?

java sqlite

1
推荐指数
1
解决办法
5482
查看次数

在Zend Framework 1.12中,Controller,Action区分大小写的规则是什么

我在一个项目中使用Zend Framework 1.12。

太奇怪了。我没有使用模块。只是控制器和动作。

我的控制器文件名为MyCCController.php,“ CC”为大写。

我在该控制器文件中的操作是 MyAAAction,'AA'是大写的。

我尝试了url http://localhost:8003/Mycc/myAA。它显示错误-“找不到页面”。我用谷歌搜索,看到有人说动作名称必须是小写。因此,我将“ MyAAAction”更改为“ myaaAction”。.phtml文件是sitll'views \ scripts \ MyCC \ MyAA.phtml'。它不在乎大写或小写。

然后我访问了url http://localhost:8003/MyCC/myaa,它仍然显示“找不到页面”。

我更改了网址http://localhost:8003/Mycc/myaa,``CC''变成了``cc''。

所以我的问题是,是否有任何文章阐述MVC URL区分大小写的规则?

或者谁可以给我有关控制器,操作,*。phtml文件或其他相关名称的规则。

如果我需要动作名称为camelCase,如何实现呢?

php zend-framework autoloader zend-framework-routing

1
推荐指数
1
解决办法
677
查看次数

任务类无法获得正确的值

在For迭代中,我将一个Task放入其中.每项任务都有自己的工作.代码如下:

 List<Task> lst_tsk = new List<Task>();
            List<int> lst_item = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            foreach (var item in lst_item)
            {
                Task tsk = new Task(() =>
                {
                    Console.WriteLine(item);
                });
                lst_tsk.Add(tsk);
                tsk.Start();
            }

            foreach (var t in lst_tsk)
            {
                if (t.IsCompleted == false)
                    t.Wait();
            }
Run Code Online (Sandbox Code Playgroud)

我希望它打印出1,2,3,4,5,6,7,8,9,10.但它有效并打破了我的想法.结果是10,10,10,10,10,10,10,10,10,10.

那么如何编辑代码以使事情正确呢?

c# asynchronous task

1
推荐指数
1
解决办法
49
查看次数