标签: thread-safety

iOS开发中的线程安全

从维基百科关于线程安全的解释,线程安全代码可以在多线程中运行.

对于iOS 3.x,UIKit不是线程安全的,因为4.0,UIKIt是线程安全的.

在我们的实现中,我们可以使用synchronized来构建线程安全代码.我对线程安全的疑问是:

1).如何使用仪器工具或其他方式检测线程安全编码问题?2).为iOS开发编写线程安全代码的任何好的做法?

multithreading thread-safety uikit ios

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

Java线程产生/饥饿问题

我正在编写一个运行多线程银行的代码.我首先用一个程序创建一个线程数组,然后将它们传递给另一个运行循环的线程来启动它们.对于应用程序的一部分,我有一个CPU密集型方法,基本上在一个彼此之间运行一系列循环.唯一的问题是,由于某种原因,它没有产生我认为应该的方式.以下是运行线程的代码:

public void run(){
    this.setPriority(MAX_PRIORITY);
    int count = 0;

    while(count<transactions.length){
        int copy = count;
            if(transactions[copy] instanceof Jumbler){
                System.out.println(copy + " is a jumbler.");
            }
            else{
                System.out.println(copy  + " is not a jumbler");
            }
        transactions[copy].run();
        count++;
    }

    }
Run Code Online (Sandbox Code Playgroud)

然后是Jumbler run方法:

    public void run(){
    System.out.println("running jumbler");
    Thread.yield();
    Thread.currentThread().yield();
    try{
        Thread.currentThread().sleep(5000);
    }catch(InterruptedException e){}
    //this.setPriority(MIN_PRIORITY);
    System.out.println("still running.");
    Thread.yield();
    nums = new int[1000];
    int i = 0;

    do{
        Thread.yield();

        for(int x=0;x<1000;x++){
            Thread.yield();
            //System.out.println("in the loop");
            nums[x]=(int)(Math.random()*10000)+1;
            for(int y = 0;y<1000;y++){
                Thread.yield();
                //System.out.println("in the the loop"); …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-safety

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

关于C#中线程的文档含糊不清

在阅读Joe Albahari的优秀着作"C#中的线程"时,我遇到了以下含糊不清的句子:

线程安全类型不一定使程序使用它是线程安全的,并且后者涉及的工作通常使前者冗余.

(您可以在此页面上找到该句子;只需搜索"不确定性"即可快速跳转到相应的部分.)

我希望使用ConcurrentDictionary来实现某些线程安全的数据结构.段落告诉我ConcurrentDictionary不保证对我的数据结构的线程安全写入吗?有人可以提供一个反例,显示线程安全类型实际上无法提供线程安全吗?

在此先感谢您的帮助.

c# multithreading thread-safety

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

关于线程安全代码的问题

我有一个课程如下

public MyClass{

Boolean flag = false;

    public Boolean getflag(){
       synchronized(flag){
          //BLOCK 1
          return flag;
       }
    }

    public Boolean setflag(){
       synchronized(flag){
           //BLOCK 2
           this.flag = flag;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

两种方法都在对象标志上同步.现在我怀疑是两个不同的线程可以同时执行同步块(1和2).可能出现以下情况吗?1)线程1是设置标志值,线程2是否同时获取其值?

java synchronization thread-safety

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

将ListAdapter.getView()同步会损害性能吗?

在我的代码中,我发现出于性能原因阻止重复和慢速依赖对象实例化,假设调用ArrayAdapter.getView()不是通过标记它来同时执行将是非常有帮助的synchronized.

有没有理由相信Android发出对getView的多线程调用,而应用synchronized关键字会损害性能?

android listview thread-safety listadapter android-listview

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

使用Java中的Vector同时崩溃

我想我不能正确理解Java中的Vector是如何同步的.在我的代码中,一些线程正在运行修改我的向量的指令,例如调用mVector.addAll(anothervector).但是在使用以下代码对向量进行交互时,我的应用程序崩溃了:

// the vector declaration
Vector<myClass> mVector = new Vector<myClass>;


// the method that crashes
public void printVector(){
    for (myClass mObject: mVector){
       System.out.println(mObject); 
    }
 }
Run Code Online (Sandbox Code Playgroud)

如果Vector对象同步,为什么会崩溃?我该如何解决?提前致谢

java multithreading thread-safety

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

java:停止安全线程; 不使用while和boolean标志

我有一个线程只执行一次任务.如果它无法在适当的时间内完成,我想阻止它.我怎样才能做到这一点?我之前看到的所有方法都使用了while循环和一个多次执行任务的标志; 但我的任务不是那样的.

谢谢你们.

java multithreading thread-safety

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

我正在寻找优雅地停止java线程并发现,但我不知道如何检查这种情况的例子

这是停止线程的好例子. 如何优雅地停止java线程? - 感谢同性恋者:)但是当我尝试检查这个例子时,我收到了无限循环.你能帮助我吗?这是我的代码

public class Num{

public void crash(ManualStopping t1) {
    t1.stopMe();
}

public static void main(String [] args) {

    Num num = new Num();
    ManualStopping t1 = new ManualStopping();
    t1.run();
    System.out.println("Main thread");
    num.crash(t1);
}
Run Code Online (Sandbox Code Playgroud)

}

class ManualStopping extends Thread{

volatile boolean finished = false;
public void stopMe(){
    finished = true;
}
public void run() {
    while(!finished){
        System.out.println("I'm alive");
    }
}
Run Code Online (Sandbox Code Playgroud)

}

java thread-safety

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

不是线程安全的 - public static List <T>

我在MSDN中读到,当用作公共静态类型时,List是线程安全的.但是,以下代码片段证明了其他情况.我试图添加和删除列表中的元素,但删除方法中途抛出一个错误说索引超出范围.这里出了什么问题?

这是检查我的理论的正确实现吗?如果没有,有人可以建议一个更好的例子.

class Program
{
    public static List<string> strlist = new List<string>();
    public static AutoResetEvent autoEvent = new AutoResetEvent(false);
    static void Main(string[] args)
    {

        strlist = new List<string>();
        new Thread(() => 
        {

            for(int i=0;i<10000000;i++)
            {
         strlist.Add("item1");
            }
            //Thread.Sleep(5000);
            autoEvent.Set();
        }).Start(); ;

        new Thread(() => {

         strlist.ForEach(e => strlist.Remove(e));

        }).Start();

        Console.WriteLine("Waiting");
        autoEvent.WaitOne();
        int ci = 0;

        strlist.ForEach(str => ci++);
        Console.WriteLine(ci.ToString() + " Done");
        Console.Read();


    }

}
Run Code Online (Sandbox Code Playgroud)

c# multithreading thread-safety

0
推荐指数
2
解决办法
1852
查看次数

无限线程java

我需要一个线程来检查JAVA桌面应用程序上的网络连接可用性.我得到了这样一个帖子

    class DataSyncThread extends Thread {
     DataSyncThread() {
     }

     public void run() {
         while(true){
            try{
                System.out.println("Checking for network");
                InetAddress addr = InetAddress.getByName(host);
                if(addr.isReachable(MIN_PRIORITY)){
                    syncData();
                }
                this.sleep(1000000);
            }catch(Exception e){}
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

现在,当我在构造函数中调用它时,应用程序永远不会加载.当我查看控制台(我触发jar从中加载)线程工作时,它在控制台中打印"正在检查网络".

帮助赞赏

java thread-safety thread-sleep

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